C #에서 현재 디렉토리 이름의 마지막 부분을 가져옵니다.


158

예를 들어에서 /Users/smcho/filegen_from_directory/AIRPassthrough와 같이 현재 디렉토리의 마지막 부분 을 가져와야 AIRPassthrough합니다.

파이썬 으로이 코드로 얻을 수 있습니다.

import os.path

path = "/Users/smcho/filegen_from_directory/AIRPassthrough"
print os.path.split(path)[-1]

또는

print os.path.basename(path)

C #으로 같은 작업을 어떻게 수행 할 수 있습니까?

추가

응답자의 도움을 받아 필요한 것을 찾았습니다.

using System.Linq;
string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName  = fullPath.Split(Path.DirectorySeparatorChar).Last();

또는

string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName = Path.GetFileName(fullPath);


1
파이썬에서는 오히려해야 os.path.basename(path)합니다.
ReneSac

답변:


132

찾고 있습니다 Path.GetFileName.
경로가로 끝나는 경우 작동하지 않습니다 \.


3
@anti : 틀렸다; 나는 그것을 시도했다. 문자열은 문자열입니다. Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough")나를 믿지 않으면 LINQPad에 붙여 넣으십시오.
SLaks

@antisanity 아니요, 디렉토리 이름을 반환하지만 질문의 내용이 아닐 수도 있습니다.
Jakob Möllås

@Jakob : 제목이 주어지면 이것이 질문에 관한 것이라고 생각합니다.
SLaks

3
@Light : 그것은 하지 작업; 시도 해봐. 이 Path클래스는 두 구분 기호를 모두 처리합니다.
SLaks

31
Directory.GetDirectories에 의해 검색된 디렉토리로이 작업을 수행하려면 다음을 사용하십시오. string directoryName = Path.GetFileName (directory.TrimEnd (Path.DirectorySeparatorChar));
Fatlad

184

시도해 볼 수 있습니다 :

var path = @"/Users/smcho/filegen_from_directory/AIRPassthrough/";
var dirName = new DirectoryInfo(path).Name;

20
나는 선택한 답변보다 이것을 좋아합니다. (Ab) 검색하려는 디렉토리이므로 GetFileName을 사용하는 것은 의미 상 잘못되었습니다. 또한 GetFileName을 결정 론적으로 만들려면 후행 슬래시 나 백 슬래시의 가능성을 고려해야하며,이를 잘라 내야합니다.
Simon Brangwin 1

var dirName = new DirectoryInfo (Path.GetDirectoryName (pathWithFilename)). Name // 더 낫습니다
kernowcode

@kernowcode OP의 요청에 따라 "AIRPassthrough"대신 "filegen_from_directory"를 반환한다고 생각합니다.
codybartfast

1
@SimonBrangwin 나는 모든 것이 리눅스에서 파일이라고 생각했다 :)
Razor

12

글쎄, 당신의 질문 제목 에 정확하게 대답하기 위해 :-)

var lastPartOfCurrentDirectoryName = 
   Path.GetFileName(Environment.CurrentDirectory);

12

이것은 당신이 가진 것에 따라 약간 다른 대답입니다. 파일 목록이 있고 파일이있는 마지막 디렉토리의 이름을 가져와야하는 경우 다음을 수행 할 수 있습니다.

string path = "/attachments/1828_clientid/2938_parentid/somefiles.docx";
string result = new DirectoryInfo(path).Parent.Name;

"2938_parentid"를 반환합니다


8

대신 호출을 나누기 위해 '/'를 사용하면 Path.DirectorySeparatorChar다음 을 사용하는 것이 좋습니다 .

이렇게 :

path.split(Path.DirectorySeparatorChar).Last() 

1
이 솔루션을 사용하는 것이 마음에 들지 않는 한 가지는 문자열이 어디에서 왔는지 가정한다는 것입니다. Windows 시스템에서 * nix 로그를 읽는 경우 어떻게합니까? 그런 다음 잘못된 캐릭터가 사용되며 의도 한 효과가 아닌 전체 경로로 끝납니다. 그냥 내 2 센트.
밥 G

이것에 동의합니다. OP는 '현재 디렉토리의 마지막 부분'이라고 말했기 때문에 괜찮습니다.
Muad'Dib

6
var lastFolderName = Path.GetFileName(
    path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar));

경로에 슬래시 구분 기호 나 백 슬래시 구분 기호가 포함 된 경우 작동합니다.


1
string.TrimEnd ()는 여러 문자를 허용하므로 여러 호출을 사용할 필요가 없습니다. msdn.microsoft.com/ko-kr/library/…
Kyle Delaney

1
@KyleDelaney는 그렇게한다! 답변이 조정되었습니다.
Holf

1
params 배열이므로 .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)작동합니다.
Kyle Delaney

1
적용된 .TrimEnd () 위치가 올바르지 않습니다. Path.GetFileName이 아니라 path에 적용해야합니다 . @Fatlad
Tony

2

이 시도:

String newString = "";
Sting oldString = "/Users/smcho/filegen_from_directory/AIRPassthrough";

int indexOfLastSlash = oldString.LastIndexOf('/', 0, oldString.length());

newString = oldString.subString(indexOfLastSlash, oldString.length());

코드가 꺼져있을 수 있지만 (테스트하지는 않았지만) 아이디어는 효과가 있습니다.


1

이것은 나와 완벽하게 작동합니다 :)

Path.GetFileName(path.TrimEnd('\\')


0

Uri 클래스를 사용할 수도 있습니다.

new Uri("file:///Users/smcho/filegen_from_directory/AIRPassthrough").Segments.Last()

다른 세그먼트를 원하거나 웹 주소로 동일한 작업을 수행하려는 경우이 클래스를 사용하는 것이 좋습니다.

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