NSFileManager 是不是将修改日期等元数据与文件一起复制?
Posted
技术标签:
【中文标题】NSFileManager 是不是将修改日期等元数据与文件一起复制?【英文标题】:Does NSFileManager copy metadata like modification dates along with files?NSFileManager 是否将修改日期等元数据与文件一起复制? 【发布时间】:2019-12-18 15:55:26 【问题描述】:[NSFileManager copyPath:toPath:handler:]
(一种已弃用的方法)的文档说:
文件或目录属性(即所有者和组号、文件权限和修改日期等元数据)也会被复制。
copyItemAtURL:toURL:error:
或 copyItemAtPath:toPath:error:
的文档中没有说明这一点。但这些方法也是如此吗?如果我有文件foo/bar.txt
的修改日期是一小时前,我将它复制到baz/bar.txt
,然后我使用attributesOfItemAtPath
得到baz/bar.txt
的修改日期,是现在还是一小时前?
【问题讨论】:
【参考方案1】:我用这段代码对此进行了测试:
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *firstPath = [documentsPath stringByAppendingPathComponent:@"test1.dat"];
NSData *data = [@"Foobar Test" dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:firstPath atomically:YES];
NSDate *firstModDate = (NSDate *)[[[NSFileManager defaultManager] attributesOfItemAtPath:firstPath error:nil] objectForKey:NSFileModificationDate];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
NSString *secondPath = [documentsPath stringByAppendingPathComponent:@"test2.dat"];
[[NSFileManager defaultManager] copyItemAtPath:firstPath toPath:secondPath error:nil];
NSDate *secondDate = (NSDate *)[[[NSFileManager defaultManager] attributesOfItemAtPath:secondPath error:nil] objectForKey:NSFileModificationDate];
NSLog(@"Original date: %.2f", firstModDate.timeIntervalSince1970);
NSLog(@"New date: %.2f", secondDate.timeIntervalSince1970);
);
它会记录相同的日期两次。所以它确实保留了修改日期元数据。使用 ios 13.3 测试。
【讨论】:
以上是关于NSFileManager 是不是将修改日期等元数据与文件一起复制?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Objective C代码中查找目录修改日期的所有内容
如何判断文件是不是已通过 NSFileManager ios 上传