파일의 전체 경로에서 디렉토리를 가져 오려면 어떻게합니까?


526

파일이있는 디렉토리를 얻는 가장 간단한 방법은 무엇입니까? 이것을 사용하여 작업 디렉토리를 설정하고 있습니다.

string filename = @"C:\MyDirectory\MyFile.bat";

이 예에서는 "C : \ MyDirectory"를 가져와야합니다.


3
문자열 리터럴이 아니어야합니까? @"C:\MyDirectory\MyFile.bat"
Edgar

3
누군가 그렇게 할 권리가있는이 질문을 보호하고 싶습니까? 2017 년의 마지막 11 개의 유사한 답변.
Boern

답변:


837

절대 경로가 있다면를 사용하십시오 Path.GetDirectoryName(path).

상대 이름 만 얻을 수있는 경우을 사용하십시오 new FileInfo(path).Directory.FullName.

참고 그 PathFileInfo두 네임 스페이스에서 발견된다 System.IO.


1
실제로 GetDirectory라는 방법이 있습니까? GetDirectoryName 아닌가요?
Brandon

1
Directory 대신 DirectoryName을 사용할 수 있습니다.
Steven Robbins

1
나는 상대적인 이름을받는 것에 대하여 증거하고 있었다. 나는 경로가 절대적이라는 것을 발견하지 못했습니다. 나는 두 가지 버전을 모두 가지고있다 :)
Jon Skeet

저격을 사용하여 확인합니까? ;)
shahkalpesh

1
@ UlyssesAlves : new FileInfo(path).Directory.FullName두 경우 모두 작동해야 한다고 생각 합니다.
Jon Skeet



12

당신이 사용할 수있는 System.IO.Path.GetDirectory(filename), 또는에 경로를 설정 FileInfo하고 사용합니다 FileInfo.Directory.

경로로 다른 일을하는 FileInfo경우 장점 이 있을 수 있습니다.


1
경로 클래스에는 'GetDirectory 메소드가 없습니다.
BillW

12

아래 언급 된 코드를 사용하여 폴더 경로를 얻으십시오.

Path.GetDirectoryName(filename);

귀하의 경우 "C : \ MyDirectory" 를 반환 합니다



5

FileInfo객체 로 작업하는 string경우 DirectoryName속성을 통해 디렉토리의 전체 경로를 쉽게 추출 할 수 있습니다.

FileInfo.DirectoryNameMSDN을 통한 부동산 설명 :

디렉토리의 전체 경로를 나타내는 문자열을 가져옵니다.

샘플 사용법 :

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

MSDN 설명서에 연결하십시오 .


5

다음을 사용하여 현재 응용 프로그램 경로를 얻을 수 있습니다.

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

행운을 빕니다!


0

먼저 System.IO 네임 스페이스를 사용해야합니다. 그때;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

또는

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

Path.GetFullPath대부분의 경우에 사용할 수 있습니다 . 그러나 파일 이름이 상대적으로있는 경우에도 경로를 얻으려면 아래의 일반적인 방법을 사용할 수 있습니다.

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

예를 들면 다음과 같습니다.

GetPath("C:\Temp\Filename.txt") 반환 "C:\Temp\"

GetPath("Filename.txt")current working directory처럼 반환"C:\Temp\"


0

필자의 경우 전체 디렉토리 (디렉토리)의 디렉토리 이름을 찾아야했기 때문에 간단하게 수행했습니다.

var dirName = path.Split('\\').Last();

1
OP는 필요하지만 "C:\MyDirectory"그렇지 않습니다 MyDirectory. 문자열 조작 방법을 사용하는 조언은 위험하며 많은 트랩이 있으며 오히려 전용 Path방법을 사용하십시오 .
Sinatr

-1

Path.GetDirectoryName (Context.Parameters [ "assemblypath"])


Path.GetDirectoryName많은 다른 답변 (허용 된 답변 포함)에서 언급
barbsan

아하? 그래서?? 어떤 점이 있습니까?
Ami Vaknin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.