AppDomain.CurrentDomain.BaseDirectory 또는 System.Environment.CurrentDirectory를 사용해야합니까?


86

동일한 폴더에 두 개의 exe 파일이 있으며 exe1의 버튼에서 exe2를 실행할 수 있습니다. 오늘 나는 원격 (터미널 서비스) 세션을 통해 고객을 관찰하고 있었고 exe2는 '파일을 찾을 수 없음'오류를 실행하지 못했지만 exe1은 확인했을 때 동일한 디렉토리에있었습니다. 그래서 AppDomain.CurrentDomain.BaseDirectory 또는 System.Environment.CurrentDirectory 를 사용해야 합니까?

감사


@Jade M 터미널에서 exe1을 어떻게 실행하고 있습니까?
양 소니아

놀랍게도 를 string.GetFullPath(path)사용 Environment.CurrentDirectory하는 대신 2 센트를 추가하고 싶습니다 CurrentDomain.BaseDirectory.
JBSnorro

답변:


186

응용 프로그램과 같은 디렉토리에서 파일을 찾으려면 AppDomain.CurrentDomain.BaseDirectory올바른 선택입니다.

Environment.CurrentDirectory응용 프로그램 실행 과정에서 변경 될 수있는 값입니다. 예를 들어, 기본 매개 변수를 사용하여 WinForms의 OpenFileDialog는이 값을 파일이 선택된 디렉토리로 변경합니다.


button1을 사용하여 OpenFileDialog를 표시 한 다음 button2를 사용하여 Environment.CurrentDirectory를 표시했지만 여전히 디버그 폴더를 표시하는 이유는 무엇입니까?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectory현재 애플리케이션 도메인이로드 된 디렉토리를 반환합니다.
System.Environment.CurrentDirectory현재 시스템 디렉토리를 반환합니다.
귀하의 경우 AppDomain.CurrentDomain.BaseDirectory에는 최상의 솔루션입니다.


1
명확하게 말하면 System.Environment.CurrentDirectory는 현재 (프로세스 별) 작업 디렉터리를 반환합니다 .
Oskar Berggren 2013 년

14

당신은 사용해야합니다 AppDomain.CurrentDomain.BaseDirectory.

예를 들어 Windows 서비스 애플리케이션에서 :

System.Environment.CurrentDirectoryC : \ Windows \ system32를 반환합니다 .

동안

AppDomain.CurrentDomain.BaseDirectory [Application.exe 위치]를 반환합니다.

주목해야 할 또 다른 중요한 요소 AppDomain.CurrentDomain.BaseDirectory는 읽기 전용 속성이지만 Environment.CurrentDirectory필요한 경우 다른 속성이 될 수 있다는 것입니다.

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

6

내가 이해했듯이 BaseDirectory. CurrentDirectory프로그램 실행 과정에서 변경 될 수 있습니다.



2

나는 보통 다음과 같은 것을 사용합니다.

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

나는 또한 내가 사용하는 동안이 며칠을 겪었습니다.

Environment.CurrentDirectory

프로덕션 서버에서 문제가 발생했지만 로컬 서버에서 잘 작동했기 때문에

그래서 나는

System.AppDomain.CurrentDomain.BaseDirectory;

그리고 그것은 두 환경 모두에서 저에게 효과적이었습니다.

그래서 그들 모두가 말했듯이 우리는 항상

System.AppDomain.CurrentDomain.BaseDirectory;

현재 도메인 디렉토리에서 경로를 확인합니다.

더 많은 정보를 찾으십시오

서버에서 경로 오류의 일부를 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.