2012-04-06 113 views
2

我試圖更新(添加/修改文件)現有的JAR文件,並且此代碼(使用DotNetZip庫)導致歸檔被「損壞」,我無法用WinRAR將其作爲ZIP或JAR打開:使用DotNetZip更新JAR文件會導致損壞的存檔?

using (FileStream fs = new FileStream("/path/to/jar", FileMode.Open)) 
{ 
    ZipFile zip = ZipFile.Read(fs); 
    fs.Seek(0, SeekOrigin.Begin); 
    zip.Save(fs); 
} 

誰能告訴我的ZIP和JAR格式之間的區別是什麼,是什麼呢?我的印象是,它只是ZIP格式的文件中的第一個條目,顯然不是這種情況。是否有可用於執行此操作的現有(C#)庫?

回答

1

A JAR二進制兼容與[「標準」] ZIP檔案。只規定了可選的Manifest文件,但這不會導致「損壞的存檔」。

我相信其中的一個(或兩者)正在發生的事情:

  1. 它不截斷文件所以有「垃圾」留底。
  2. 實際的「閱讀」是懶惰的,後者「保存」可能會在數據正確讀取之前搞亂數據。

(它正在壓縮到一個新文件將允許這有待考證。)

+1

我不知道它發出它,但你是正確的。我通過將ZipFile保存到MemoryStream,關閉並清空ZipFile的文件流,清空ZipFile,然後將MemoryStream寫入最終目的地,解決了生產代碼中的問題。 你節省了一天,我以爲我所有的工作時間都浪費了,非常感謝! – Salis 2012-04-06 14:54:01