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与[ " standard"] ZIP 存档二进制兼容。仅规定了可选的清单文件,但这不会导致“损坏的存档”。

我相信其中一种(或两种)正在发生:

  1. 它不会截断文件,因此最后会留下“垃圾”。
  2. 实际的“读取”是惰性的,而后者的“保存”可能会在正确读取数据之前弄乱数据。

(将其压缩到一个文件将允许对此进行验证。)

于 2012-04-06T04:59:52.547 回答