在可可中使用 nsfilesustem 获取文件属性不存在此类文件

Posted

技术标签:

【中文标题】在可可中使用 nsfilesustem 获取文件属性不存在此类文件【英文标题】:get file attributes with nsfilesustem in cocoa no such file exists 【发布时间】:2014-09-21 22:20:12 【问题描述】:

我已经搜索了大约 3 个小时的如何获取文件的创建日期,我得到了带有枚举器的 URL,然后我将它传递给更正百分比的路径,最后我尝试获取文件属性...所以,无论如何我都不会更改路径,但我总是收到相同的错误“操作无法完成。没有这样的文件或目录”,以及路径“file:///Users/raul/Desktop /DSC_0386.JPG"。

代码示例:

NSError* error = nil;
//NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:[[url absoluteString] stringByRemovingPercentEncoding] error:&error];
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error];
NSLog(@"%@",error);
NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate];

我已经注释了第一个 NSDictionary 以直接尝试使用 nsstring 的第二个语句。

我已检查我的文件是否已经存在。

请帮忙??我错过了什么?

【问题讨论】:

【参考方案1】:

几个问题:

1) 在大多数情况下,您不必将NSURL 转换为路径字符串即可对文件进行操作。特别是可以使用NSURL的“资源值”API直接获取创建时间:

NSDate* creationDate;
NSError* error;
if ([url getResourceValue:&creationDate forKey:NSURLCreationDateKey error:&error])
    /* use creationDate */;
else
    /* handle error */;

2) 如果您确实需要从NSURL 获取路径字符串,请不要使用-absoluteString。这仍然是一个 URL 字符串,带有“file://”等内容。URL 字符串不是有效的路径字符串。您在问题中引用的错误消息已经告诉您这一点。它向您显示了“file:///Users/raul/Desktop/DSC_0386.JPG”的文件“路径”,但这根本不是路径。

您应该只使用-path 方法。当您获得-path 时,您无需对百分比编码进行任何操作。

3) 你应该忽略任何错误输出参数,直到你检查了你调用的方法是成功还是失败,通常是通过检查它的返回值。也就是说,您发布的代码应该像这样重新组织:

NSError* error = nil;
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error];
if (fileAttribs)

    NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate];
    // ... use fecha ...

else
    NSLog(@"%@",error);

【讨论】:

谢谢,几分钟前我已经建立了相同的第二部分答案。我要试试1st。在第三部分,错误日志只是用来知道我在开发时遇到的错误。非常感谢

以上是关于在可可中使用 nsfilesustem 获取文件属性不存在此类文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在可可中获取音频文件的比特率

可可绑定核心数据中的延迟获取是啥?

在标签可可中显示时间总和

在可可应用程序中使用 xmpp 发送任何文件。是不是可以?

使用可可刷新finder中文件或文件夹的图标

尝试在 Swift 项目中使用 Objective C 可可豆荚,桥接文件编译为 Swift 代码