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 是不是将修改日期等元数据与文件一起复制?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 查询“上次修改”等元数据

如何在Objective C代码中查找目录修改日期的所有内容

如何判断文件是不是已通过 NSFileManager ios 上传

将内容粘贴到文件 - NSFileManager

NSFileManager 中是不是有任何方法可以仅获取某些字节范围的文件内容

attributesOfItemAtPath 返回 nil (SWIFT)