2009-06-22 6 views
3

나는 데스크톱 애플 리케이션과 asp.net 웹 사이트에서 사용됩니다 assmebly있다.어떻게 둘 다 웹/Windows 응용 프로그램에서 C#에서 상대 경로를 확인할 수 있습니다 #

두 경우 모두 상대 경로 (로컬 파일이 아니라 URL)를 처리해야합니다.

이 방법을 어떻게 구현할 수 있습니까? 데스크탑 환경에 대한

/folder/file.ext => d:\wwwroot\mywebsite\folder\file.ext 
~/folder/file.ext => d:\wwwroot\mywebsite\folder\file.ext 
d:\wwwroot\mywebsite\folder\file.ext => d:\wwwroot\mywebsite\folder\file.ext 

: (c:\program files\myprogram\bin\이의 경로입니다 웹 envronment에서

string ResolvePath(string path); 

는 ID가 ( d:\wwwroot\mywebsite이 폴더에서 점은 IIS되는 경우) 방법이처럼 행동 할 것으로 예상 한 .exe)

/folder/file.ext => c:\program files\myprogram\bin\folder\file.ext 
c:\program files\myprogram\bin\folder\file.ext => c:\program files\myprogram\bin\folder\file.ext 

는 차라리 어떤 상태에서의 실행에 따라 다른 IPathResolver를 주입하지 않는 게 좋을.

내가 어떤 환경에 있는지 어떻게 알 수 있습니까? 그러면 상대 경로를 해결하기 위해 각 경우에해야 할 일은 무엇입니까?

감사합니다 존의 코멘트에서 언급 한 바와 같이

+2

무엇에 대한 상대 경로? 어셈블리에서 사용하는 파일입니까? 어셈블리와 함께 배포됩니까? 더 나은 방법이있을 수 있으므로 성취하려는 것을 말하고 싶을 수 있습니다. –

+0

웹 환경에서 iis 웹 사이트의 루트 디렉토리 (위 예제의 d : \ wwwroot \ mywebsite)와 관련됩니다. Windows 데스크톱 응용 프로그램으로 실행할 때 .exe가있는 dir (위의 예제에서 c : \ program files \ myprogram \ bin \). –

답변

1

, 무엇을 기준으로? 당신은 상대 경로 기본 경로를 결합 System.IO.Path.Combine 방법을 사용할 수 있습니다 같은 : 당신은 당신이 원하는대로 기본 경로로 위의 줄에 Environment.CurrentDirectory을 대체 할 수

System.IO.Path.Combine(Environment.CurrentDirectory, relativePath); 

.

구성 파일에 기본 경로를 저장할 수 있습니다.

5

원래 질문에 답변하지 않았다고 생각합니다.

".. \ .. \ data \ something.dat"를 "D : \ myApp \ source \ bin \"에있는 실행 파일과 관련 있다고 가정하십시오. 사용 :

System.IO.Path.Combine (Environment.CurrentDirectory, relativePath);

은 간단히 문자열을 연결하여 쉽게 얻을 수있는 "D : \ myApp \ source \ bin .. \ .. \ data \ something.dat"를 반환합니다. 결합은 패스를 해결하지 못하고 후행하는 백 슬래시 및 기타 사소한 일을 처리합니다. 그는 아마도 실행하고 싶어 :

System.IO.Path.GetFullPath ("D : \ myApp \ source \ bin .. \ .. \ data \ something.dat");

을 해결하려면 경로를 "D : \ myApp \ data \ something.dat"로 지정하십시오.

2

웹 사이트 바이너리는 응용 프로그램이 실행될 때 임시 폴더에 복사되므로 대개 excecuting 어셈블리에서 상대 경로를 얻을 수 없습니다.

이이 일을 현명한 방법이 될 수 없습니다 -하지만 나는이 문제를 이런 식으로 뭔가이었다 해결하기 위해 무슨 짓을했는지 :

if (filepath.StartsWith("~")) 
{ 
    filepath = HttpContext.Current.Server.MapPath(filepath); 
} 
else 
{ 
    filepath = System.IO.Path.Combine(Environment.CurrentDirectory, filepath); 
} 

이 때문에 웹 버전에 - 상대 경로는 ~에있다 앞에 - 그래서 그것이 web.config 또는 App.config에서 왔는지 알 수 있습니다.