2

既存の JAR ファイルを更新 (ファイルの追加/変更) しようとしていますが、このコード (DotNetZip ライブラリを使用) によりアーカイブが「破損」し、WinRAR で ZIP または 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#) ライブラリはありますか?

4

1 に答える 1

1

JARは、[「標準」] ZIP アーカイブとバイナリ互換です。オプションのマニフェスト ファイルのみが規定されていますが、これにより「破損したアーカイブ」が発生することはありません。

次のいずれか (または両方) が発生していると思います。

  1. ファイルを切り詰めるのではなく、最後に「ゴミ」が残ります。
  2. 実際の「読み取り」は怠惰であり、後者の「保存」は、正しく読み取られる前にデータを台無しにする可能性があります。

新しいファイルに圧縮すると、これを確認できます。)

于 2012-04-06T04:59:52.547 に答える