2010-08-16 64 views
7

我以前一直在使用Chilkat Zip .Net從我的應用程序生成備份文件,但是在出現組件問題後,轉移到Xceed Zip .Net以獲得相同的功能。糾正損壞的ZIP文件頭文件

如果你拿一個用Chilkat生成的Zip,並嘗試使用Xceed,7Zip,WinZip進行提取,那麼它會失敗。

如果你採用相同的文件並使用Chilkat,Windows Zip,WinRar進行解壓縮,那麼該文件提取得很好。

閱讀維基百科關於WinZip格式我調查了中央目錄和本地文件標題,看來奇爾卡特組件寫錯了中央目錄記錄文件大小。如果您使用FRHed等編輯中央記錄並使文件大小與本地標題大小相同,則所有內容都可以正確提取。

你會推薦我做什麼?

  1. 寫使用奇爾卡特庫提取郵編,然後用Xceed圖書館
  2. 重新壓縮讀取壓縮檔尋找必要郵編標誌物(如在規範中定義),然後糾正中央一個小工具頭。
  3. 其他一些組合。

回答

2

這取決於您的程序生成的備份數量。 也許,從程序或手中解壓縮/重新壓縮它們可能會更容易。 但是,如果有很多文件,更好的方法是修復中央目錄記錄字段 - 您應該編寫代碼,其中搜索中央目錄; 2)對於每條記錄,轉到存儲本地文件頭的位置,並讀取文件大小; 3)回到中央目錄並在那裏寫入有效的文件大小; 4)小心大文件,如果它們是 - 文件大小> 4Gb是以擴展名寫入的。

+0

謝謝。我最終做的是你寫的東西,我只是解壓縮舊的備份文件,然後重新壓縮它們,但只有當文件本身在記錄中顯示錯誤。我製作了一個小應用程序,作爲支持模塊提供給我們的應用程序,以便舊圖書館在那裏使用。 – 2010-08-24 03:33:57