전체 파일 경로에서 폴더 이름 가져 오기


116

응용 프로그램의 전체 경로에서 폴더 이름을 어떻게 얻습니까?

이것은 아래 파일 경로입니다.

c:\projects\root\wsdlproj\devlop\beta2\text

여기서 "텍스트"는 폴더 이름입니다.

이 경로에서 폴더 이름을 어떻게 얻을 수 있습니까?

답변:


205

DirectoryInfo.Name 참조 :

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;

이 경우 폴더가 실제로 파일 시스템에 있어야하는 것은 아닙니다 ( 폴더 "c : \ projects \ root \ wsdlproj \ devlop \ beta2 \ text"가없는 경우 폴더 이름은 여전히 전체 파일 경로에 대한 "텍스트"입니다. 현재) 파일 시스템에 존재)?
Peter Mortensen 2015 년

@PeterMortensen, 아니. 방금 이것을 테스트했으며 폴더 경로가 존재하지 않더라도 메서드는 문자열에서 가장 낮은 수준의 폴더 이름을 반환합니다.
vbguyny

1
감사합니다. 좋은 답변입니다. 그러나 System.IO.Directory가 이러한 작업을 지원하지 않는다는 사실에 약간 의아해합니다.
anhoppe

1
@anhoppe-동의합니다. 내가 본 또 다른 옵션은 Path.GetDirectoryName msdn.microsoft.com/en-us/library/… 이지만 내일까지 테스트 할 수 없습니다.
Don Cheadle

30

파일 경로에서 상위 폴더 이름을 얻고 싶다고 생각합니다. 쉽게 얻을 수 있습니다. 한 가지 방법은 FileInfo유형 객체 를 만들고 해당 Directory속성을 사용하는 것 입니다.

예:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;

16

이 시도

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);

당신이 문자열로 파일 이름이있는 경우, 너무 파일 이름을 반환
swissben

1
이 경우 텍스트는 (확장자없는) 파일 이름입니다. 나는 그것이 OP가 추구하는 것이라고 생각했습니다. 폴더이거나 파일 이름은 실제로 중요하지 않습니다. 문자열에 파일 이름이 포함되어 있지 않은 경우이 코드는 그가 추구하는 것을 제공합니다.
Øyvind Bråthen 2011 년

4
이 같은 \로 경로를 종료하지 않는 한@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
크리스토프 Claes가

1
이것은 폴더에서 작동하지 않습니다. 빈 문자열을 얻습니다. 파일이 있어야합니다
BraveNewMath 2011

3
이것은 폴더 경로에 후행 백 슬래시가 포함되지 않은 경우 (예 : Path.GetDirectoryName () 에서 반환 된 폴더 경로 ) 제대로 작동 합니다. 하지만 해당 함수의 이름 인 GetFileName ()은 약간 오해의 소지가 있습니다.
Peter Mortensen 2015 년

9

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

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();

만약에이 같은 경로 외모 : @ "C : \ 프로젝트 \ roott \ wsdlproj \ devlop \ 베타 2 \ 텍스트 \"그래서 여분의 DirectorySeparatorChar와,
알렉스 Pacurar

1
@Alex-이러한 종류의 경로에서도 작동하도록 코드를 수정했습니다. StringSplitOptions.RemoveEmptyEntries트릭을 수행합니다.
Kristof Claes 2011 년

msdn.microsoft.com/en-us/library/… 에 따르면 필요한 권한이 제공되지 않으면 FileInfo에서 예외가 발생할 수 있습니다.
Daniel B

5

간단히 사용 Path.GetFileName

여기-폴더의 전체 경로에서 폴더 이름을 추출합니다.

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

다음은 몇 가지 추가 사항입니다. 파일의 전체 경로에서 폴더 이름을 추출합니다.

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"

3

text.txt가 디렉토리인지 파일인지 확인하기 위해 파일 시스템으로 이동하는 것 외에는 방법이 없다고 생각했습니다. 간단한 것을 원하면 다음을 사용할 수 있습니다.

s.Substring(s.LastIndexOf(@"\"));

1
문자열 앞에 슬래시를 사용하지 않으려면 : s.Substring (s.LastIndexOf (@ "\") + 1);
David Yates는

2

이 경우 얻고 자하는 파일은 strpath 변수에 저장됩니다 :

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;

2

다음은 DirectoryInfo 개체를 만들지 않고도 나를 위해 일한 대체 방법입니다. 요점은 GetFileName()경로에 후행 슬래시가 없을 때 작동 한다는 것입니다.

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

예:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);

1

이것은 또한 그렇게 할 수 있습니다;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

이 빈 문자열이 반환됩니다
disklosr

@disklosr - 단지 ScriptCs 테스트 그리고 '텍스트'를 반환
스티브 쿠퍼에게

2
이것은 폴더 경로에 후행 백 슬래시가 포함되지 않은 경우 (예 : Path.GetDirectoryName () 에서 반환 된 폴더 경로 ) 제대로 작동 합니다. 하지만 해당 함수의 이름 인 GetFileName ()은 약간 오해의 소지가 있습니다.
Peter Mortensen 2015 년

0

이전 답변을 기반으로 함 (그러나 수정 됨)

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

.NET 소스GetFileName 에서 설명 :

주어진 경로의 이름과 확장 부분을 반환합니다. 결과 문자열에는 경로에서 마지막 백 슬래시 ( "\"), 슬래시 ( "/") 또는 콜론 ( ":") 문자 뒤에 오는 경로 문자가 포함됩니다. 후행 슬래시, 슬래시 또는 콜론 문자를 제거한 후 경로에 백 슬래시가없는 경우 결과 문자열은 전체 경로입니다. 경로가 널인 경우 결과 문자열은 널입니다.


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