Objective-C:从路径字符串中提取文件名


251

当我有NSString/Users/user/Projects/thefile.ext我要提取thefile使用Objective-C的方法。

最简单的方法是什么?


4
[path lastPathComponent]或[[path pathComponents] lastObject]。两者都给出“ thefile.ext”。有[path pathExtension]方法可以获取“ ext”,但文件名则不一样。
安东2009年

Answers:


598

取自NSString参考,可以使用:

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

lastPathComponent调用将返回thefile.ext,而stringByDeletingPathExtension将最后删除的扩展名后缀。


9
我从未听说过lastPathComponent。谢谢!
Dimitris

6
另一个解决方案是将此与Marc的答案结合在一起:([[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension]使用所需的任何文件管理器)。这样可以确保文件名已正确本地化,并且扩展名已被删除。
willurd 2011年

1
非常感谢!这很有帮助!不过,您如何才能获得扩展名?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

嘿,在讨论之后,这还蛮多的,但是我只是想知道些什么。我将如何撤销此操作?最终,我将在程序中添加一些代码,将文件拖放到其中。如何获取PATH ITSELF,这样我的计算机才能知道要访问哪个文件?如何获取输入的文件并获取文件的路径?
克里斯蒂安·克赖特

37

如果要显示用户可读的文件名,则不要使用lastPathComponent。而是将完整路径传递给NSFileManager的displayNameAtPath:方法。基本上,这是做同样的事情,只有正确地对文件名进行本地化并根据用户的喜好删除扩展名。


1
对于包,您可能想使用[[[[NSBundle bundleWithPath:pref] localizedInfoDictionary] objectForKey:@“ CFBundleName”]。displayNameAtPath包含此代码返回本地化名称的扩展名。
Peter N Lewis,2009年

1
不要忘记首先检查CFBundleDisplayName。
Peter Hosey,2009年

3

尽管@Marc具有出色的洞察力,但冒着被拖延多年甚至脱离话题的风险-在Swift中,它看起来像:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.