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


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.