【问题标题】:ICSharpCode.SharpZipLib Compression method not supported PKZIPICSharpCode.SharpZipLib 压缩方法不支持 PKZIP
【发布时间】:2015-12-17 18:38:36
【问题描述】:

我对使用 2000 年以来的 Windows 版本 4 的旧 PKZIP® 命令行创建的 zip 文件有疑问。 我正在使用 ICSharpCode.SharpZipLib 来提取文件。 Windows 在资源管理器中打开文件没有问题。 代码如下:

private void Extract(string zipFile, string outputfolder)
{
  try
  {
    _logger.InfoFormat("Extracting {0}", zipFile);
    System.IO.Stream stream = new System.IO.FileStream(zipFile, System.IO.FileMode.Open);
    ZipInputStream zipInputStream = new ZipInputStream(stream);
    ZipEntry zipEntry = zipInputStream.GetNextEntry(); //Throws Compression error exception
    while (zipEntry != null)
    {
      String entryFileName = zipEntry.Name;
      _logger.InfoFormat("Entry-Filename: {0}", entryFileName);

      byte[] buffer = new byte[4096];
      String fullZipToPath = Path.Combine(outputfolder, entryFileName);
      string directoryName = Path.GetDirectoryName(fullZipToPath);
      if (directoryName.Length > 0)
      {
        Directory.CreateDirectory(directoryName);
      }

      using (FileStream streamWriter = File.Create(fullZipToPath))
      {
        StreamUtils.Copy(zipInputStream, streamWriter, buffer);
      }
      zipEntry = zipInputStream.GetNextEntry();
    }
  }
  catch (Exception ex)
  {
    _logger.Error("Error during extraction",ex);
    throw;
  }
}

知道如何解决这个问题吗?

【问题讨论】:

  • 您能否详细说明异常情况?什么是异常消息?是不是说格式不支持?
  • 堆栈跟踪是:ICSharpCode.SharpZipLib.Zip.ZipEntry.set_CompressionMethod(CompressionMethod value) bei ICSharpCode.SharpZipLib.Zip.ZipInputStream.GetNextEntry() bei CSVImport.Decompressor.Extract(String zipFile, String outputfolder)在 c:\Users\dev-cotreba\Desktop\Neuerer_csv\CSVImport\Decompressor.cs:Zeile 84 中。消息:不支持压缩方法。信息量不大
  • Windows 使用的解压器与 SharpZipLib 使用的解压器无关,因此您无法真正在一个工作和一个不工作之间划清界限。从消息中可以看出,SharpZipLib 不支持使用的压缩方案。
  • 奇怪的是,我可以使用资源管理器将一些文件添加到 zip 中,并且可以使用 SharpZipLib 提取它们。它会提取文件并在尝试提取通过 PKZIP 添加的文件时引发异常。有点奇怪,因为我在 25 年前使用 pkzip 并且它在 DOS 上工作。认为库应该支持这种旧的压缩方法。
  • 有一点,保持向后兼容性更多的是痛苦而不是好处。我猜作者并没有因为它太旧而选择支持它。就我个人而言,如果我从头开始编写 Zip 库,那么 25 年前的 ZIP 格式不会在支持的格式列表中排名靠前。

标签: c# sharpziplib pkzip


【解决方案1】:

我在解压使用 7-zip 制作的 zip 文件时遇到了同样的问题。

我将它从 Deflate64 更改为 Deflate,然后它工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多