2011-05-05 65 views
4

我已经在C#中使用DotNetZip DLL创建了一个非常简单的程序。我试图提取一个选择最佳压缩的zip文件。这是代码。DotNetZip不提取从WinZip最佳压缩

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文件使用了不受支持的压缩方法。

使用最佳压缩时,DotNetZip库不能提取zip文件吗?有没有办法解决这个问题?有什么选择?

+0

那么,是什么问题?是的,图书馆可能会在unziping中遇到一些麻烦。 – 2011-05-05 15:04:02

+1

如果DotNetZip库在其错误消息中提到该格式不受支持,那么您可能无法在这些格式上使用DotNetZip ......使用支持** IS **的其他格式... – 2011-05-05 15:48:05

回答

3

我会想象使用的zip压缩不是支持的之一。这里是一个示例论坛帖子,其中是这种情况: http://dotnetzip.codeplex.com/discussions/64680

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

+0

正在使用的格式是PPMd,DotNetZip库不支持该格式。谢谢(你的)信息! – 2011-05-05 16:02:52

0

嘿,这里我创建了提取方法。你需要给目录 像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); 
       } 

      } 
     }