我正在使用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
...是否有任何修复程序???
答案 0 :(得分:2)
我认为可能只是导致这种情况的操作系统。我已经尝试过资源管理器中发生的事情。我有一个文本文件,修改时间戳为17:06:45。我右键单击该文件,然后选择发送到|压缩(zipped)文件夹。然后我右键单击新的zip文件并选择Extract All ...然后选择Next,Next,Finish。现在,提取的文本文件的时间戳为17:06:46。
当我使用7-Zip或WinRar时也会发生同样的情况。但是只有在使用.zip文件时才会发生。如果我让他们创建.7Z或.RAR文件,时间戳不会更改。
找到有关zip格式的an article on Wikipedia。如果你搜索“秒”,你会找到一个描述ZIP文件系统模仿DOS FAT文件系统的部分,它只有两秒的时间分辨率。
答案 1 :(得分:2)
我收到了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将它放入拉链时增加了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,您当然可以手动创建它。
希望这有帮助, 大卫