ios - 为什么文件的创建时间戳因设备不同而不同?

标签 ios objective-c linux file computer-science

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

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

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

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

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

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

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

最佳答案

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

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

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

关于ios - 为什么文件的创建时间戳因设备不同而不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59249922/

相关文章:

python - 默认 python/usr/bin/python 而不是/usr/local/bin/python

ios - 如何在OpenGL中多次添加光?

iphone - 适用于 iPhone 的弹出框 Controller

ios - Swift - 过渡导航栏

ios - dispatch_after 循环/重复

ios - 设置了约束但未正确放置 View

linux - 在 Ubuntu 18.04 中安装旧版本的 gnu-make

linux - 绑定(bind)/命名named.conf意外删除/替换..恢复帮助

ios - 如何根据用户设备从图像盒中选择图像

ios - 从右到左导航中的滑动方向错误