[英]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,但您可以嘗試使用ZipPackage類System.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.