2009-06-19 6 views
7

C#의 상대 경로가 나를 위해 작동합니다. 한 가지 경우로, 내 App에 일련의 Texture2d 객체를 처리하면, 파일 이름을 가져 와서 파일을 찾고 이미지 객체에 텍스처를로드하는 데 사용합니다. 그런 다음 클래스 파일에 저장된 상대 경로에서 이미지를로드하고 Content/gfx에 상대적인 상대 경로를 사용해야합니다. 하지만 이러한 텍스처를로드하지 않으면 이러한 상대 경로가 실패합니다. 내 상대 경로가 실패하지 못하게하려면 어떻게해야합니까? 웹 작업에서 모든 rel 경로는 우리가 작업하는 파일이있는 폴더와 관련이 있습니다.이 방법으로 설정하고 내 응용 프로그램이있는 루트 폴더에 대한 모든 rel 경로를 만들 수 있습니까? 당신이 걱정하는 경우Winforms의 상대 경로

+0

이 디버그 또는 배치 모드에 파일입니까? –

답변

18

처음에는 상대 경로를 사용하지 않는 것이 좋습니다.

Path.Combine을 사용하면 상대 경로를 절대 경로로 바꿀 수 있습니다. 예를 들어, 시작 EXE의 전체 경로를 얻기 위해 이것을 사용할 수 있습니다 : 그 일단

string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath; 

, 당신은 디렉토리입니다 얻을 수 있습니다 :

string exeDir = Path.GetDirectoryName(exeFile); 

와 절대에 상대 경로를 설정 경로 :

string fullPath = Path.Combine(exeDir, "..\\..\\Images\\Texture.dds"); 

이것은 상대적 경로를 사용하는 것보다 훨씬 더 신뢰할 수 있습니다.

+0

Thx는 두 개의 첫 번째 줄을 많이 알기 때문에 내가 찾고있는 곳이었습니다. 나는 이중 백 슬래시를 피하기 위해 세 번째 줄에서 '@'를 사용합니다. – radbyx

+0

내 디렉토리에 공백이 있으면 경로를 찾을 수 없지만 제대로 표시되지 않으면 경로를 찾을 수 없습니다. – Xaisoft

1

실행 파일이나 디렉토리의 하위 디렉토리에있는 같은 디렉토리에 있어야 리소스를 기대하는 경우, 항상

string fullPath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), subPath); 

를 사용하는 것이 가장 좋습니다 또는 작업 디렉토리 이 작업을 잘못 수행했을 수 있습니다.

string fullPath = System.IO.Path.Combine(System.Reflection.Assembly.GetEntryAssembly().Location, subPath); 
0

// [이름 공간] 당신이 Depug에 .- 파일을 복사해야합니다 // 이름 공간 이

 string path = (Assembly.GetEntryAssembly().Location + ""); 
     path = path.Replace("name space", "filename.--"); 


     // [WindowsFormsApplication4] is name space 
     //you should copy your "mysound.wav" into Depug file 

     //example:: 
     string path_sound = (Assembly.GetEntryAssembly().Location + ""); 
     path_sound = path_sound.Replace("WindowsFormsApplication4.exe", "mysound.wav"); 

     SoundPlayer player1 = new SoundPlayer(path_sound); 
     player1.Play();