7

我正在使用Sharpziplib version 0.86提取 zip 文件。它工作正常,但在通过代码提取 winzip 文件时,Lastwritetime 在几秒钟内发生变化......

这个也用过 File.SetLastWriteTime(fullPath, theEntry.DateTime);

实际文件 Lastwritetime:4/8/2010 2:29:03PM 在使用 winzip 压缩该文件并使用代码提取该文件后,提取的文件 Lastwritetime 更改为4/8/2010 2:29:04PM...是否有任何修复?

4

2 回答 2

5

我从 Sharpziplib 论坛得到了这个回复

你好

这似乎是一个 WinZip 错误。我以前没有注意到这一点。

我做了这个测试:

1) 使用 WinZip 将文件添加到 zip。在 WinZip 中单击属性和详细信息。查看详细信息列表并找到文件时间戳。

2) 使用 SharpZipLib 创建具有相同输入文件的类似 zip 文件。在 Winzip 中打开结果并查看文件时间戳的属性 > 详细信息。

我的输入文件的修改时间戳(文件属性)为 2010-12-14 15:51:28,在我的测试中,SharpZipLib 将其正确存储在 zip 中,而 WinZip 将其存储为 2010-12-14 15:51:30

换句话说,WinZip 在将其放入 zip 时增加了 2 秒。解压后(使用 WinZip 或 SharpZip),修改后的现在是 15:51:30,而不是原来的 15:51:28。

令人惊讶的是,WinZip 中如此明显的错误竟然这么长时间都没有被报告和修复。如果您有付费版本,您当然应该向他们提出错误错误。

我只记得旧的 8.3 文件系统时间戳中大约 2 秒的粒度。

快速谷歌发现这个......

引用“原始 DOS 文件系统只有 32 个字节来表示目录中的文件。在 Win32 文件系统 (VFAT) 中更正了非常严格的 8.3 文件名和文件日期的有限粒度(2 秒)。” 来自http://www.xxcopy.com/xxcopy15.htm

Zip 格式仅允许标准时间戳条目中的 2 秒粒度。日期和时间以标准 MS-DOS 格式编码。

可以包含一个可选的 NTFS 额外数据字段 (0x000a),它可以保存上次修改时间、上次访问时间和创建时间。WinZip 似乎没有创建它。SharpZip 将使用它(如果存在),但据我所知,使用 FastZip 创建 zip 时不会创建它。这可能是添加到代码中的有用选项。如果使用 ZipFile,您当然可以手动创建它。

希望这会有所帮助,大卫

于 2010-12-16T04:02:06.993 回答
4

我认为这可能只是导致这种情况的操作系统。我已经尝试过资源管理器中发生的事情。我有一个修改后的时间戳为 17:06:45 的文本文件。我右键单击文件并选择发送到 | 压缩(压缩)文件夹。然后我右键单击新的 zip 文件并选择 Extract All... 然后是 Next、Next、Finish。现在提取的文本文件的时间戳为 17:06:46。

当我使用 7-Zip 或 WinRar 时也会发生同样的情况。但是只有在使用 .zip 文件时才会发生这种情况。如果我让他们创建 .7Z 或 .RAR 文件,则时间戳不会更改。

在 Wikipedia 上找到一篇关于zip 格式的文章。如果你搜索“秒”,你会发现一个描述 ZIP 文件系统模仿 DOS FAT 文件系统的部分,它只有两秒的时间分辨率。

于 2010-12-15T13:22:06.550 回答