【问题标题】:DotNetZip does not extract Best compression from WinZipDotNetZip 不会从 WinZip 中提取最佳压缩
【发布时间】:2011-05-05 14:58:12
【问题描述】:

我使用 DotNetZip dll 在 C# 中创建了一个非常简单的程序。我正在尝试提取一个选择最佳压缩的 zip 文件。这是代码。

static void Main(string[] args)
    {
        string nameOfFile = "testBest.zip";
        string directory = "testBest";

        Console.WriteLine("Extracting file {0} to {1}", nameOfFile, directory); 

        using (ZipFile zip = ZipFile.Read(nameOfFile))
        {
            foreach (ZipEntry e in zip)
            {
                e.Extract(directory, ExtractExistingFileAction.OverwriteSilently);
            }
        }
    }

错误提示其中一个 txt 文件使用了不受支持的压缩方法。

使用 Best 压缩时 DotNetZip 库能否不提取 zip 文件?有没有办法处理这个?有哪些替代方案?

【问题讨论】:

  • 那么,问题是什么?是的,库在解压缩时可能会遇到一些问题。
  • 如果 DotNetZip 库在其错误消息中指出该格式不受支持,那么您可能无法在这些格式上使用 DotNetZip……使用其他格式 支持...

标签: c# .net dotnetzip


【解决方案1】:

我想所使用的 zip 压缩不是受支持的压缩之一。这是一个示例论坛帖子,情况就是这样: http://dotnetzip.codeplex.com/discussions/64680

在这种情况下,使用 DEFLATE64 的压缩而不是 DEFLATE,给出了与您看到的相同的错误。虽然您的整个错误文本会更有帮助,但它可能归结为同一件事 - 库不支持您的压缩方法。

【讨论】:

  • 使用的格式是 PPMd,DotNetZip 库不支持这种格式。感谢您的信息!
【解决方案2】:

嘿,我在这里创建了提取方法。您需要提供目录的完整路径 喜欢 c:\temp\temp.zip

  public void MyExtractZip(string FileName,string Password)
        {
            string ExtractLocation = string.Empty;
            using (ZipFile zip = ZipFile.Read(FileName))
            {
                // here, we extract every entry, but we could extract conditionally
                // based on entry name, size, date, checkbox status, etc. 
                string ArchiveName =Path.GetFileNameWithoutExtension(FileName);
                Console.WriteLine("[1] Extract Here [2] Extract too [3] Extract to "+ArchiveName);
                Console.WriteLine("\n");
                Console.Write("Select your option :: \t");
                 string entry = Console.ReadLine();
                 int n = int.Parse(entry);

                string Location =string.Empty;
                if (n == 2)
                {
                    Console.Write("Enter the Location ::" );
                    Location = Console.ReadLine();

                }
                Console.Write("\n");
                switch (n)
                {
                    case 1:
                        ExtractLocation=Path.GetDirectoryName(FileName);
                        break;
                    case 2:
                        ExtractLocation = Location + "\\"; 
                        break;
                    case 3:
                        ExtractLocation = Path.GetDirectoryName(FileName) + "\\"+Path.GetFileNameWithoutExtension(FileName);
                        break;
                }
                zip.Password = Password;
                foreach (ZipEntry e in zip)
                {
                    e.Extract(ExtractLocation, ExtractExistingFileAction.OverwriteSilently);
                }

            }
        }

【讨论】:

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