2011-05-05 66 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); 
       } 

      } 
     }