簡體   English   中英

幫助從.Net創建Zip文件並從Java讀取它們

[英]Help in creating Zip files from .Net and reading them from Java

我正在嘗試從.Net創建一個可以從Java代碼中讀取的Zip文件。

我已經使用SharpZipLib來創建Zip文件,但是如果根據#ZipLib庫的CheckZip函數生成的文件是有效的並且可以通過WinZip或WinRar成功解壓縮我嘗試使用Java解壓縮時總是會出錯Java中的.Utils.Zip類。

問題似乎是在SharpZipLib編寫的錯誤標題中,我還在SharpDevelop論壇上發布了一個問題,但沒有結果(請參閱http://community.sharpdevelop.net/forums/t/8272.aspx獲取信息)但沒有結果。

有人使用.Net壓縮Zip文件並使用Java.Utils.Zip類對其進行解壓縮的代碼示例嗎?

關心馬西莫

我使用過DotNetZip庫 ,它似乎運行正常。 典型代碼:

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}

我在使用SharpZipLib(最新版本)創建拉鏈並使用java.utils.zip解壓縮時遇到了同樣的問題。

以下是解決這個問題的方法。 我不得不強制排除zip64的用法:

ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))

s.UseZip64 = UseZip64.Off;

你不想在.NET中使用ZipPackage類 - 它不是一個標准的zip模型。 嗯,但它假定文件中的特定結構,帶有着名名稱的清單,依此類推。 ZipPackage似乎已針對Office文檔和XPS文檔進行了優化。

如果您正在使用通用ZIP文件並希望獲得良好的互操作性,那么第三方庫(如http://www.codeplex.com/DotNetZip )可能是更好的選擇。

DotNetZip構建了幾乎所有東西都可以互操作的文件,包括Java的java.utils.zip。 但要小心使用Java不支持的功能,如ZIP64或Unicode。 ZIP64僅適用於非常大的檔案,我認為Java目前不支持這種檔案。 Java以特定方式支持Unicode,因此如果您使用DotNetZip生成基於Unicode的ZIP文件,您只需遵循一些規則即可正常工作。

無法使用SharpZipLib,但您可以嘗試使用ZipPackageSystem.IO.Packaging創建zip文件,而無需使用第三方庫(需要.NET 3+)。

我在Linux上解壓縮SharpZipLib壓縮文件時遇到了類似的問題。 我想我解決了它(我現在在Linux和Mac上工作,我測試過它),查看我的博客文章: http//igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

要判斷它是否真的是一個符合標准的ZIP文件,請參閱PKZIP的.ZIP文件格式規范

值得一提的是,使用SharpZipLib在Windows Mobile設備上創建ZIP並使用WinZip或Windows XP的內置壓縮文件夾功能打開它們也毫不費力,使用SharpZipLib在桌面上生成ZIP並使用我的處理方式也沒有問題。在移動設備上擁有自己的ZIP提取實用程序(基本上是zlib的包裝器)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM