Objective-C: Extract filename from path string
当我NSString /Users/user/Projects/thefile.ext时,我想用Objective-C方法提取thefile。
最简单的方法是什么?
-
[path lastPathComponent]或[[path pathComponents] lastObject]。 两者都给出'thefile.ext'。 有[path pathExtension]方法来获取'ext'但文件名不一样。
从NSString引用中获取,您可以使用:
1
| NSString *theFileName = [[string lastPathComponent] stringByDeletingPathExtension]; |
lastPathComponent调用将返回thefile.ext,stringByDeletingPathExtension将从末尾删除扩展名后缀。
-
我的天啊!谢谢你,谢谢你,谢谢你!
-
我从来没有听说过lastPathComponent。谢谢!
-
另一种解决方案是将此与Marc的答案相结合:[[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](使用您想要的任何文件管理器)。这可确保文件名已正确本地化,并且已删除扩展名。
-
非常感谢!这帮了很多忙!你怎么会得到扩展?
-
@TwoDumpling NSString *myExtension = [myString pathExtension]
-
嘿,在讨论之后这是相当多的,但我只是想知道一些事情。我该如何扭转这一行动?我最终会在我的程序中添加一些代码,以便将文件拖放到哪里。如何获取PATH ITSELF,以便我的计算机可以知道要访问哪个文件?如何获取输入的文件并获取文件的路径?
-
百万美元问题&回答..它也清除了URL中的%20 ..我没有使用stringByDeletingPathExtention
如果您正在显示用户可读的文件名,则不希望使用lastPathComponent。 而是将完整路径传递给NSFileManager的displayNameAtPath:方法。 这基本上做了同样的事情,只是它正确地本地化文件名并根据用户的偏好删除扩展名。
-
对于bundle,您可能希望使用[[[NSBundle bundleWithPath:pref] localizedInfoDictionary] objectForKey:@"CFBundleName"]。 displayNameAtPath包含此代码返回本地化名称的扩展名。
-
不要忘记先检查CFBundleDisplayName。
可能会有多年的迟到和偏离主题 - 尽管@ Marc的出色见解,在Swift看起来像:
1
| let basename = NSURL(string:"path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent |