首页 > 解决方案 > 为什么不同设备的文件创建时间戳不同?

问题描述

stat -t "%s" filename在 MAC 上使用,然后我得到如下一行:

16777223 9414940 -rwxr-xr-x 1 name staff 0 10838392 "1569834440" "1567413629" "1567413629" "1567413629" 4096 21176 0 filename

根据man stat,第二个timestap( "1567413629") 是该文件的创建时间戳。

但是当我在 Objective-C 中使用代码来获取文件的创建时间时,会发生一些奇怪的事情。我得到了"1567413631"预期的创建时间"1567413629"。目标代码如下:

NSDate * createDate = ((WMMediaAsset *)section.assets[index]).creationDate;
NSString * timestamp = [NSString stringWithFormat:@"%lld", (long long)([createDate timeIntervalSince1970])];

因为我认为创建时间戳是文件内部的绝对值记录。将文件复制到另一台设备不会更改文件的创建时间。

我错了吗?你能给我一些提示或提醒我应该去哪里找到更多信息吗?

标签: iosobjective-clinuxfilecomputer-science

解决方案


您正在读取的创建日期来自文件系统,而不是来自文件(元)数据本身,例如,复制的数码照片可能包含拍摄时的 EXIF 日期(以及创建原始文件的日期),这与副本的文件系统创建日期。

某些系统在复制文件时可能会保留原始创建日期,这通常在文件系统级别之上完成,例如首先创建一个副本,将当前时间作为其创建日期,然后进行系统调用以更改文件系统级别创建日期与原始日期相同。

作为 macOS 中的示例,如果在 Finder 中复制文件,则该副本会从原始文件继承其创建日期。但是,如果使用cp创建日期在 shell 中完成复制,则不会继承。


推荐阅读