并非所有平台都有文件创建时间的概念。例如。 Linux 不适用于所有文件系统,一般的 stat() 调用不提供该信息。
这并不意味着您无法访问似乎是创建时间的内容。但您不一定要相信它的价值,Java API 中也记录了这些价值:
返回创建时间。创建时间是文件创建的时间。
如果文件系统实现不支持时间戳来指示文件的创建时间,则此方法返回特定于实现的默认值,通常是最后修改时间或表示纪元的 FileTime (1970-01 -01T00:00:00Z)。
https://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html#creationTime()
如果您使用具有此属性的 FileStat 类,Dart 确实有类似的 API:
日期时间已更改
最后一次更改文件系统对象的数据或元数据的时间。
在 Windows 平台上,这是文件创建时间。
https://api.dart.dev/stable/2.7.2/dart-io/FileStat/changed.html
但 FileStat 的数据被记录为来自 POSIX stat() 系统调用,它没有文件创建时间戳的概念,但具有以下内容:
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
这映射到您可以从FileStat 获得的三个时间戳:
import "dart:io";
main() {
final stat = FileStat.statSync("test.dart");
print('Accessed: ${stat.accessed}');
print('Modified: ${stat.modified}');
print('Changed: ${stat.changed}');
}
但正如您在带有 XFS 的 Linux 上所看到的,它会为更改和修改返回相同的值:
[julemand101@beta ~]$ dart test.dart
Accessed: 2020-04-07 18:19:20.404
Modified: 2020-04-07 18:19:19.020
Changed: 2020-04-07 18:19:19.020
您可以获得不同的changed 时间,例如更新inode信息:
[julemand101@beta ~]$ chmod +x test.dart
[julemand101@beta ~]$ dart test.dart
Accessed: 2020-04-07 18:19:42.341
Modified: 2020-04-07 18:19:19.020
Changed: 2020-04-07 18:19:39.397
这是有道理的,因为 st_ctime 被记录为:
字段 st_ctime 通过写入或设置 inode 信息(即所有者、组、链接计数、模式等)来更改。
https://linux.die.net/man/2/stat
简而言之,您应该尝试看看在使用FileStat 时iOS 和Android 会发生什么。但简而言之,很难编写一个独立于平台的 API 来访问每个平台的差异。尤其是对于像 Linux 这样的平台,是否存在某个功能取决于每个文件系统。