[c#] 현재 폴더 경로 가져 오기

파일을 변환하는 프로그램을 만들고 싶습니다. 사용자가 모든 디렉토리에 실행 파일을 배치 할 수 있기를 원하며 해당 프로그램을 실행할 때 (.exe를 두 번 클릭하면) exe 파일이있는 현재 폴더 내에서 모든 파일 을 처리하도록 프로그램을 원합니다 . 프로그램이 현재 실행중인 경로를 어떻게 확인할 수 있습니까?

나는 시도 System.Windows.Forms.Application.StartupPath했지만 그것은 잘못된 길로 보인다.

어떤 아이디어?



답변

현재 디렉토리가 실행 폴더와 다를 수 있으므로 특히 단축키를 통해 프로그램을 실행할 때 사용 해서는 안됩니다Directory.GetCurrentDirectory() .

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);당신의 목적 을 위해 사용 하는 것이 좋습니다 . 현재 실행중인 어셈블리가있는 경로 이름을 반환합니다.

Soner Gönül 가 그의 답변에서 말했듯이 내 제안 된 접근 방식을 사용하면 실행중인 어셈블리, 엔트리 어셈블리 또는 다른로드 된 어셈블리를 구별 할 수 있지만

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

충분할 수도 있습니다. 이것은 같을 것입니다

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);


답변

System.AppDomain.CurrentDomain.BaseDirectory

그러면 응용 프로그램의 실행 디렉토리가 제공됩니다. 심지어 웹 애플리케이션에서도 작동합니다. 나중에 파일에 도달 할 수 있습니다.


답변

다음 코드를 사용하여 간단한 콘솔 응용 프로그램을 만들었습니다.

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

결과 실행 파일을에 복사했습니다 C:\temp2. 그런 다음 해당 실행 파일에 대한 바로 가기를 C:\temp3에 넣고 실행 한 번 (exe 자체에서 한 번, 바로 가기에서 한 번) 실행했습니다. 다음과 같은 두 가지 출력을 모두 제공했습니다.

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

난 동안 확인이 있어야합니다 몇 가지 가 있습니다 이유를 설명하는 cockamamie 이유 다섯 개 가지 방법이 거의 동일한 일을, 나는 확실히 그게 뭔지 모르겠어요. 그럼에도 불구하고, 대부분의 상황에서 당신이 좋아하는 것을 자유롭게 선택할 수 있습니다.

업데이트 :
“시작 위치 :”필드를로 변경하여 바로 가기 속성을 수정했습니다 C:\temp3. 결과는 다음과 같습니다.

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

… 적어도 입증하는 몇 가지 다른 방법 사이의 구분의를.


답변


답변

string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

에서 Path.GetDirectoryName

지정된 경로 문자열에 대한 디렉토리 정보를 리턴합니다.

에서 Application.ExecutablePath

실행 파일 이름을 포함하여 응용 프로그램을 시작한 실행 파일의 경로를 가져옵니다.


답변

이것을 사용하십시오.

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

이것도 사용할 수 있습니다.

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);


답변

에 대한 .NET CORE의 사용System.AppContext.BaseDirectory

(를 대신하여 AppDomain.CurrentDomain.BaseDirectory)