2010-12-15 16 views
4

我正在使用Sharpziplib version 0.86来提取zip文件。它工作正常,但同时通过提取代码的WinZip文件,Lastwritetime正在改变秒......在c#中提取zipfile时,lastwritetime正在改变?

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

实际文件Lastwritetime:4/8/2010 2:29:03PM 荏苒使用WinZip对该文件后,虽然该提取文件使用的代码,提取文件Lastwritetime更改为4/8/2010 2:29:04PM ...有没有解决这个问题?

+0

我不确定我是否理解你的问题。你的意思是,当用Sharpziplib解压zip文件的内容时,zip文件的LastWriteTime正在改变,WinZip只改变一次到后者一秒? – 2010-12-15 09:01:13

+0

@SoMoS:不是winzip ...通过代码编译...有一个秒的变化...对于这个文件1秒...对于其他文件2或3秒的差异是有 – bala3569 2010-12-15 09:03:56

+0

只是从另一个角度来看;你确定这是在提取文件上创建错误时间戳的提取,或者是你的初始视图(在解压缩之前的zipfile内)显示不正确的时间戳。不知道Zip如何存储它的日期时间戳,但我怀疑它是'1-1-70之后的秒数'。其中一个似乎是以不同的方式计算。 – 2010-12-15 09:36:08

回答

2

我从Sharpziplib论坛

这种反应这似乎是一个WinZip的错误。我之前没有注意到这一点。

我做了这个测试:

1)用WinZip文件添加到压缩。在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中这样一个明显的bug可能没有被报告和解决这么久。如果你有一个付费版本,你肯定应该向他们提出一个错误的错误。

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

快速谷歌发现这个...

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

ZIP格式只允许在标准时间戳entry.The日期和时间2秒的粒度 被编码在标准的MS-DOS格式。

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

希望这会有所帮助, David

+0

anwser kandupidichitta pola ..很棒... – 2010-12-16 04:35:05

+0

听起来像您已经观察到2个不同问题的组合效果:WinZip错误和与ZIP文件关联的2秒精度。 – Cheeso 2010-12-17 21:08:14

2

我认为它可能只是造成这种情况的操作系统。我试过Explorer中会发生什么。我有一个修改时间戳为17:06:45的文本文件。我右键单击该文件并选择发送到|压缩(压缩)文件夹。然后,我右键单击新的zip文件并选择全部提取...,接着是下一步,下一步,完成。现在提取的文本文件的时间戳为17:06:46。

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

找到关于zip格式的an article on Wikipedia。如果您搜索“秒”,则会找到一个描述ZIP文件系统模拟DOS FAT文件系统的部分,该文件系统的时间分辨率仅为2秒。

+0

看看我的答案...从sharpziplib论坛得到这一个 – bala3569 2010-12-16 05:13:38

+0

这不是操作系统。默认情况下,zip格式将时间存储为2秒精度,因此可能会导致一秒钟的问题。不过,两秒钟或三秒钟都不是。 Zip工具可以存储更高分辨率的时间,并且有标准的方法可以做到这一点,但并非所有的工具都能利用这个机会。 – Cheeso 2010-12-17 21:06:59

+0

@Cheeso:我知道这就是为什么我参考了维基百科的文章,它描述了ZIP文件系统模仿DOS FAT文件系统的事实,该文件系统具有2秒的精度。 – comecme 2010-12-17 21:17:14