Leo*_*ese 2 datetime file dart flutter
我需要在我的 Flutter 项目中获取文件的创建时间,但我从File对象中获得的只是lastModified()and lastAccessed(),没有任何方法来获取DateTime创建时间。
我看到在 Java 中是可能的:https : //stackoverflow.com/a/2724009/3997782 以及在 Swift 中:https : //stackoverflow.com/a/6428757/3997782
我可以使用 FlutterMethodChannel函数来获得它,但我想知道是否有一种原生的 Dart 方式来获得它。
如何获取本地文件信息,比如文件创建时间
并非所有平台都有文件创建时间的概念。例如,Linux 并不适用于所有文件系统,并且通用stat()调用不提供该信息。
这并不意味着您无法访问似乎是创建时间的内容。但是您不必相信它的价值,Java API 中也记录了这些价值:
返回创建时间。创建时间是创建文件的时间。
如果文件系统实现不支持时间戳来指示文件创建的时间,则此方法返回实现特定的默认值,通常是上次修改时间或表示纪元的 FileTime (1970-01-01T00: 00:00Z)。
如果您使用FileStat具有此属性的类,Dart 确实具有类似的 API :
日期时间已更改
上次更改文件系统对象的数据或元数据的时间。
在 Windows 平台上,这是文件创建时间。
https://api.dart.dev/stable/2.7.2/dart-io/FileStat/changed.html
但是 FileStat 的数据被记录为来自 POSIXstat()系统调用,它没有文件创建时间戳的概念,但具有以下内容:
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 */
Run Code Online (Sandbox Code Playgroud)
这映射到您可以从中获得的三个时间戳FileStat:
import "dart:io";
main() {
final stat = FileStat.statSync("test.dart");
print('Accessed: ${stat.accessed}');
print('Modified: ${stat.modified}');
print('Changed: ${stat.changed}');
}
Run Code Online (Sandbox Code Playgroud)
但是正如您在带有 XFS 的 Linux 上看到的那样,对于已更改和已修改,它将返回相同的值:
import "dart:io";
main() {
final stat = FileStat.statSync("test.dart");
print('Accessed: ${stat.accessed}');
print('Modified: ${stat.modified}');
print('Changed: ${stat.changed}');
}
Run Code Online (Sandbox Code Playgroud)
changed如果您例如更新 inode 信息,您可以获得不同的时间:
[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
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为st_ctime记录为:
字段 st_ctime 通过写入或设置 inode 信息(即所有者、组、链接计数、模式等)来更改。
https://linux.die.net/man/2/stat
简而言之,您应该尝试看看 iOS 和 Android 在使用FileStat. 但简而言之,很难编写一个独立于平台的 API 来访问每个平台的差异。特别是对于像 Linux 这样的平台,如果某个功能存在与否,则取决于每个文件系统。
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |