在C#中提取zipfile时,lastwritetime正在更改?

bal*_*569 5 c# unzip sharpziplib

我正在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...对此是否有任何解决办法???

bal*_*569 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 个字节来表示目录中的文件。非常严格的 8.3 文件名和文件日期的有限粒度(2 秒)在 Win32 文件系统 (VFAT) 中得到了纠正。” 来自http://www.xxcopy.com/xxcopy15.htm

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

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

希望这有帮助,大卫