2010-12-15 17 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