是否有任何档案不使用 MS-DOS 文件时间以避免 2 秒粒度?

是否有任何档案不使用 MS-DOS 文件时间以避免 2 秒粒度?

是否有任何档案不以 MS-DOS 格式存储目录时间(如 zip 文件),以便在提取过程中保留秒数?

我想要实现的是将三星 Galaxy S8 中的顶级 Android 文件夹压缩为 .zip(或任何存档格式),并保留日期和精确的时间戳。之后,我尝试将这些 .zip 文件提取到我的 Windows 10 或 Windows 11 Pro PC 中,同时在提取后保留时间戳。

我读过一篇由 PKZIP 撰写的文章,其中指出时间戳是 30 年前的 MS-DOS 格式。我的问题是为什么,是否有解决方法?我可以在 .NET 框架或 C++ 中以某种方式编辑它,无论他们使用哪种软件。

我在 Ubuntu 22.04 的虚拟机上安装了 Fedora,并尝试使用 star archive,但由于我的编程技能尚浅,文档对我来说实在太复杂了。我尝试从尽可能多的来源收集信息,然后自己学习。

因此,我尝试了解 ZIP 文件如何提取文件夹并保留其完整的时间戳。

答案1

我读过一篇由 PKZIP 撰写的文章,其中指出时间戳是 30 年前的 MS-DOS 格式。我的问题是为什么

因为 PKZIP 最初是为 MS-DOS 编写的,所以它的档案格式是针对 MS-DOS 数据格式设计的。

如果有的话,有解决方法吗?

大多数现代 Zip 归档程序都会使用额外字段以 1 秒的精度将修改时间存储在 UTC 时区中。但这在很大程度上取决于您的 Galaxy 手机上的 Zip 存档程序是否支持此扩展。您可以通过创建一个小型存档然后使用 Info-ZIPzipinfo -v查看 .zip 文件来检查它是否包含子字段来测试这一点:

$ zipinfo -v test.zip
  file last modified on (DOS date/time):          2022 Dec 7 10:08:34
  file last modified on (UT extra field modtime): 2022 Dec 7 10:08:33 local
  file last modified on (UT extra field modtime): 2022 Dec 7 08:08:33 UTC
  [...]
  The central-directory extra field contains:
  - A subfield with ID 0x5455 (universal time) and 5 data bytes.
    The local extra field has UTC/GMT modification/access times.

但是如果您想要高于 1 秒的精度,则需要修改现有的 Zip 软件以添加另一个额外的纳秒子字段。

(这还取决于 Zip提取器您电脑上使用的 Zip 应用程序不支持此扩展 – Windows 资源管理器内置的 Zip 格式支持非常过时,您应该使用第三方 Zip 应用程序。)

其他存档格式通常允许更高的精度,通常是微秒或纳秒——RAR 就是这样一个例子。(它是否以这样的精度存储和提取时间仍然取决于程序。)

答案2

Zip 当然是有能力的更精确地存储时间。在下面的示例中,使用 NTFS 分区上的 7-Zip 制作,记录时间:11.4280575秒(虽然我不相信超过毫秒的数字是准确的)。Android 中使用的软件和文件系统是否能够达到这种精度则是另一个问题。

顺便说一下,有一个“7Z 文件管理器”Google Play,尽管没有人声称7-Zip. (顺便说一句,7-Zip适用于葡萄酒Linux

Zip 时间精度

相关内容