从 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