Objective-C : 경로 문자열에서 파일 이름 추출


251

내가있을 때 NSString/Users/user/Projects/thefile.extI 추출 할 thefile목적-C 방법과.

가장 쉬운 방법은 무엇입니까?


4
[path lastPathComponent] 또는 [[path pathComponents] lastObject]입니다. 둘 다 'thefile.ext'를 제공합니다. 'ext'를 얻는 [path pathExtension] 메소드가 있지만 파일 이름과 동일하지 않습니다.
Anton

답변:


598

에서 촬영 는 NSString 참조 , 당신은 사용할 수 있습니다 :

NSString *theFileName = [[string lastPathComponent] stringByDeletingPathExtension];

lastPathComponent호출 반환 thefile.ext하고이 stringByDeletingPathExtension끝에서 확장 접미사를 제거합니다.


9
나는 들어 본 적이 없다 lastPathComponent. 감사합니다!
Dimitris

6
또 다른 해결책은 이것과 Marc의 대답의 조합입니다 : [[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](원하는 파일 관리자 사용). 이렇게하면 파일 이름이 올바르게 현지화되고 확장자가 제거됩니다.
willurd

1
정말 고맙습니다! 이것은 많은 도움이되었습니다! 그래도 확장 프로그램을 어떻게 얻습니까?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

이봐, 이것은이 토론 후 꽤 조금이지만, 나는 단지 뭔가 궁금합니다. 이 동작을 어떻게 되돌 립니까? 결국 프로그램에 파일을 끌어다 놓을 수있는 코드를 추가 할 것입니다. PATH ITSELF를 얻는 방법은 무엇입니까? 컴퓨터가 액세스 할 파일을 알 수 있습니까? 입력 한 파일을 가져 와서 파일 경로를 얻으려면 어떻게합니까?
Christian Kreiter

37

사용자가 읽을 수있는 파일 이름을 표시하는 경우을 사용하고 싶지 않습니다lastPathComponent . 대신 NSFileManager의 전체 경로를 전달하십시오 displayNameAtPath:. 이것은 기본적으로 동일한 작업을 수행하며 파일 이름을 올바르게 지역화하고 사용자의 환경 설정에 따라 확장자를 제거합니다.


1
번들의 경우 [[[NSBundle bundleWithPath : pref] localizedInfoDictionary] objectForKey : @ "CFBundleName"] 대신 사용할 수 있습니다. displayNameAtPath는이 코드가 현지화 된 이름을 반환하는 확장명을 포함합니다.
피터 N 루이스

1
CFBundleDisplayName을 먼저 확인하는 것을 잊지 마십시오.
Peter Hosey

3

@Marc의 탁월한 통찰력에도 불구하고 Swift에서는 몇 년 늦게 시작될 수있는 주제가 다음과 같습니다.

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.