从 NSURL 检索文件名

Posted

技术标签:

【中文标题】从 NSURL 检索文件名【英文标题】:Retrieve filename from NSURL 【发布时间】:2013-11-26 16:03:38 【问题描述】:

我有一个网址

http://www.hdwallpapers.in/walls/honda_v4_concept_widescreen_bike-wide.jpg

我想提取文件名为“honda_v4_concept_widescreen_bike-wide.jpg”

我该怎么做?

【问题讨论】:

【参考方案1】:

下面的代码应该可以工作。更新了它,所以我删除了最上面的声明。我本可以使用 C++ 中的 NSString 与 const char * 或 std::string,但认为 C 字符指针非常适合这种情况。

还对其进行了改进,使其具有自己的简洁功能:

-(NSString*) extractFile:(const char*) url 

    NSURL *yourURL = [NSURL URLWithString:
                     [NSString stringWithCString:url 
                                 encoding:NSUTF8StringEncoding]];
    return [yourURL lastPathComponent];

使用:

const char *path_ = "http://www.hdwallpapers.in/walls/honda_v4_concept_widescreen_bike-wide.jpg";
NSLog(@"\t\tYour Extracted file: \n\t%@", [self extractFile:path_]);

【讨论】:

我强烈推荐反对这里的第一个代码sn-p。第二个很好 @MikeAbdullah 为什么会这样? 1.它假装一个 URL 是一个路径;他们不是。如果 URL 碰巧在路径之后有任何组件(即参数、片段或查询),那会搞砸这个例程 2.不太重要,但仍然是创建一个新的中间字符串对象,这是不必要的浪费 NSURL.lastPathComponent 甚至可以用于fileReferenceURL 风格的 URL。改用absoluteString 会导致“id=65134...”【参考方案2】:

只需使用基本名称basename()函数

$url = http://www.fullhdwallpapers.in/wp-content/uploads/2017/01/Logan-Movie-Kid-2017-680x425.jpg

echo basename($url); 

【讨论】:

这似乎是 php - 作者指定他们有一个 NSURL,这意味着他们想要 Swift 或 Objective-C 中的答案。【参考方案3】:

斯威夫特 3:

let urlString = "http://www.hdwallpapers.in/walls/honda_v4_concept_widescreen_bike-wide.jpg"
if let url = URL(string: urlString) 
  print("file name: \(url.lastPathComponent)")
 else 
  print("error - not a valid url!")

【讨论】:

【参考方案4】:

下面的代码有效。 absoluteString 在另一个答案中被推荐,但如果文件名中有(例如)空格,它就不能正常工作。

NSString *JPEGfilename = [[yourURL path] lastPathComponent];

【讨论】:

以上是关于从 NSURL 检索文件名的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Photos Framework [Swift 2.0] 从 imagepickercontroller 检索 NSURL

使用 NSURL 检索托管对象 ID

从 NSURL 获取 SPTImage?

将文件路径从 NSString 转换为 NSURL

iOS 7 从文档中检索收件箱目录

如何在swift中从文档目录中获取特定文件的NSURL