2008-09-16 11 views
4

Javaコードから読み込むことができる.NetからZipファイルを作成しようとしています。.NetからZipファイルを作成し、Javaから読み取る際のヘルプ

私はSharpZipLibを使用してZipファイルを作成しましたが、生成されたファイルが#ZipLibライブラリのCheckZip関数に従って有効で、WinZipまたはWinRar経由で正常に圧縮解除できない場合は、それはJavaのJava.Utils.Zipクラスを使用しています。

問題はSharpZipLibによって書かれた間違ったヘッダーにあるようですが、SharpDevelopフォーラムにも質問は掲載されましたが、結果はありません(結果はhttp://community.sharpdevelop.net/forums/t/8272.aspxを参照)。

Zipファイルを.Netで圧縮し、Java.Utils.Zipクラスで圧縮解除するコードサンプルがありますか?

よろしく マッシモ

答えて

8

DotNetZip libraryを使用していますが、正しく動作しているようです。典型的なコード:

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

ありがとう、私はすぐに提案されたコンポーネントを評価し、CodePlexサイトから、それは良い解決策のようです。コードをチェックして、 – massimogentilini

+0

が新しいZipFile()をusing節で囲むことを忘れないようにしてください! ZipFileはIDisposableです。 – Cheeso

+0

男、何年も前にこの図書館について知りたかったのですが!私はSharpZipLibが最高のものだと思っていました...明らかに、もっと研究の余地があります:) –

2

SharpZipLibを支援することはできませんが、第3部ライブラリ(.NET 3+が必要です)を使用せずにZipPackageクラスSystem.IO.Packagingを使用してzipファイルを作成しようとすることができます。

+0

現在のソリューションはフレームワーク2.0で動作しますが、.Net 3については良い提案です。x私たちが移植するとき – massimogentilini

1

PKZIPの.ZIP File Format Specificationを参照してください、それは本当に準拠ZIPファイルのかどうか判断します。

SharpZipLibを使用してWindows MobileデバイスにZIPを作成し、WinZipまたはWindows XPの内蔵の圧縮フォルダ機能を使用してZIPを作成したり、SharpZipLibでデスクトップ上にZIPを作成したりするのに問題はありませんでした。私の独自のZIP抽出ユーティリティ(基本的にzlibのラッパ)でモバイルデバイス上で処理します。

2

ZipPackageクラスを.NETで使用したくない場合は、標準のzipモデルではありません。まあまあですが、それはよく知られている名前を持つマニフェストなど、ファイル内の特定の構造を前提としています。 ZipPackageは、OfficeドキュメントとXPSドキュメント用に最適化されているようです。

http://www.codeplex.com/DotNetZipのようなサードパーティ製のライブラリは、汎用のZIPファイルを実行していて、相互運用性が必要な場合は、おそらくより良い選択です。

DotNetZipは、Javaのjava.utils.zipを含むほぼすべてのものと非常に相互運用可能なファイルをビルドします。しかし、JavaがサポートしていないZIP64やUnicodeなどの機能を使用する場合は注意が必要です。 ZIP64は非常に大きなアーカイブでのみ役に立ちますが、現時点ではJavaがうまくサポートされていません。 JavaはUnicodeを特定の方法でサポートしています.DotNetZipを使用してUnicodeベースのZIPファイルを作成する場合、いくつかの規則に従う必要があり、正常に動作します。

3

私はSharpZipLib(最新バージョン)を使ってzipを作成し、java.utilsで抽出するのと同じ問題がありました(私はLinuxとMacでうまく動作し、テストしました) .zip。

ここで私の問題を解決しました。私はzip64の使用を除外しなければならなかった:

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

s.UseZip64 = UseZip64.Off; 
+0

この解決法は私のために働いたが、テストする機会がある前に投票したが、今度はもう一度それをアップvoteできない。 – Dave

+0

この修正プログラムをお送りいただきありがとうございます。このようなアプローチを使用してZipファイルを作成せずにJavaを開くことができない場合もあります。 –

関連する問題