ios - 为什么不同设备的文件创建时间戳不同?
问题描述
我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])];
因为我认为创建时间戳是文件内部的绝对值记录。将文件复制到另一台设备不会更改文件的创建时间。
我错了吗?你能给我一些提示或提醒我应该去哪里找到更多信息吗?
解决方案
您正在读取的创建日期来自文件系统,而不是来自文件(元)数据本身,例如,复制的数码照片可能包含拍摄时的 EXIF 日期(以及创建原始文件的日期),这与副本的文件系统创建日期。
某些系统在复制文件时可能会保留原始创建日期,这通常在文件系统级别之上完成,例如首先创建一个副本,将当前时间作为其创建日期,然后进行系统调用以更改文件系统级别创建日期与原始日期相同。
作为 macOS 中的示例,如果在 Finder 中复制文件,则该副本会从原始文件继承其创建日期。但是,如果使用cp
创建日期在 shell 中完成复制,则不会继承。
推荐阅读
- c# - 唤醒方法未启动
- javascript - 使用javascript分析复选框的状态
- javascript - Vue v3 如何能够使用未定义的变量?
- javascript - 如何使用 NestJS 返回 XLSX 响应?
- python - 使用 firebase 和 python(pyrebase) 订购数据
- java - Hibernate 生成器 class="increment" 生成重复的 id
- node.js - 在nodejs中使用ESM导入语法时如何调用构造函数?
- r - 在 Leaflet R 中添加标签/标记而不是弹出窗口
- cortex-m - libc init 函数没有返回
- java - 使用 JPA CriteriaBuilder 定义排序选项