我正在使用这段代码尝试检索文件的最后修改日期:
NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath: myFilePath error:&error];
if (attributes != nil) {
NSDate *date = (NSDate*)[attributes objectForKey: NSFileModificationDate];
NSLog(@"Date modiifed: %@", [date description]);
}
else {
NSLog(@"Not found");
}
这适用于主捆绑包中的文件,但如果文件位于应用程序文档文件夹的子目录中,则不适用myFilePath
,如下所示:
/Users/User/Library/Application Support/iPhone Simulator/6.0/Applications/The App ID Number/Documents/mySubdirectory/My Saved File
它不断返回“未找到”。
我知道文件在那里,因为我可以用finder查看它。我也尝试删除文件名中的空格,但这没有效果。
错误日志说没有这样的文件或目录,所以当我尝试将文件复制到文档目录时,看起来肯定出错了。
奇怪的是,使用contentsOfDirectoryAtPath
遍历文档子目录会将文件显示为存在。
我尝试对路径进行硬编码并以编程方式检索它:
*myFolder = [documentsDirectory stringByAppendingPathComponent:@"myFolder"];
*myFilePath = [myFolder stringByAppendingPathComponent:theFileName];
谁能看到我出错的地方?
答案 0 :(得分:18)
试试这个。我遇到了同样的问题并解决了下一个问题:
NSURL *fileUrl = [NSURL fileURLWithPath:myFilePath];
NSDate *fileDate;
[fileUrl getResourceValue:&fileDate forKey:NSURLContentModificationDateKey error:&error];
if (!error)
{
//here you should be able to read valid date from fileDate variable
}
希望它有所帮助;)
答案 1 :(得分:13)
Swift 3解决方案:
func fileModificationDate(url: URL) -> Date? {
do {
let attr = try FileManager.default.attributesOfItem(atPath: url.path)
return attr[FileAttributeKey.modificationDate] as? Date
} catch {
return nil
}
}
答案 2 :(得分:6)
这是一个类似Swift的@ zvjerka24解决方案:
func lastModified(path: String) -> NSDate? {
let fileUrl = NSURL(fileURLWithPath: path)
var modified: AnyObject?
do {
try fileUrl.getResourceValue(&modified, forKey: NSURLContentModificationDateKey)
return modified as? NSDate
} catch let error as NSError {
print("\(#function) Error: \(error)")
return nil
}
}
答案 3 :(得分:3)
如果收到错误:
" CFURLCopyResourcePropertyForKey失败,因为它传递了这个没有方案的网址"
您可以尝试通过附加" file:///"来解决此问题。在将它转换为NSURL之前的NSString文件路径,它在我的情况下工作。
答案 4 :(得分:1)
对于macOS系统中的任何文件,我们可以使用以下任一选项轻松获得修改日期:
方法1:
方法2:
NSDictionary *属性=(__bridge NSDictionary *)MDItemCopyAttributes(itemRef,(__bridge CFArrayRef)attributeNames);
CFDateRef modifDate = MDItemCopyAttribute(itemRef,kMDItemContentModificationDate);
您还可以打印MDItem提供的其他各种属性: NSLog(@“所有属性%@”,属性);