2011-02-01 107 views
1

我正在使用ICSharpCode.SharpZipLib解壓縮包含文件,文件夾和子文件夾的文件,但是我收到了一個錯誤,我沒有在這裏或其他任何論壇中找到。Monotouch - 用於解壓縮文件的ICSharpCode.SharpZipLib

代碼:

public static void UnZipFiles(string zipPathAndFile, string outputFolder, string password, bool deleteZipFile) 
{ 
     ZipInputStream s = new ZipInputStream(File.OpenRead(zipPathAndFile)); 
     if (password != null && password != String.Empty) 
      s.Password = password; 
     ZipEntry theEntry; 
     string tmpEntry = String.Empty; 
     while ((theEntry = s.GetNextEntry()) != null) 
     { 
      string directoryName = outputFolder; 
      string fileName = Path.GetFileName(theEntry.Name); 
      // create directory 
      if (directoryName != "") 
      { 
       Directory.CreateDirectory(directoryName); 
      } 
      if (fileName != String.Empty) 
      { 
       if (theEntry.Name.IndexOf(".ini") < 0) 
       { 
        string fullPath = directoryName + "\\" + theEntry.Name; 
        fullPath = fullPath.Replace("\\ ", "\\"); 
        string fullDirPath = Path.GetDirectoryName(fullPath); 
        if (!Directory.Exists(fullDirPath)) Directory.CreateDirectory(fullDirPath); 
        FileStream streamWriter = File.Create(fullPath); 
        int size = 2048; 
        byte[] data = new byte[2048]; 
        while (true) 
        { 
         size = s.Read(data, 0, data.Length); 
         if (size > 0) 
         { 
          streamWriter.Write(data, 0, size); 
         } 
         else 
         { 
          break; 
         } 
        } 
        streamWriter.Close(); 
       } 
      } 
     } 
     s.Close(); 
     if (deleteZipFile) 
     { 
      File.Delete(zipPathAndFile); 

     } 
} 

錯誤有:

Unhandled Exception: ICSharpCode.SharpZipLib.SharpZipBaseException: Unknown block type 6 
    at ICSharpCode.SharpZipLib.Zip.Compression.Inflater.Decode() [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.Compression.Inflater.Inflate (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.ZipInputStream.BodyRead (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.ZipInputStream.InitialRead (System.Byte[] destination, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.ZipInputStream.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0 
    at ICSharpCode.SharpZipLib.Zip.ZipInputStream.CloseEntry() [0x00000] in <filename unknown>:0Error connecting stdout and stderr (127.0.0.1:10001) 

    at ICSharpCode.SharpZipLib.Zip.ZipInputStream.GetNextEntry() [0x00000] in <filename unknown>:0 
    at FolderNavigation.ZipController.UnZipFiles (System.String zipPathAndFile, System.String outputFolder, System.String password, Boolean deleteZipFile) [0x00119] in /Users/claudio/Projects/FolderNavigation/FolderNavigation/ZipController.cs:15 
    at FolderNavigation.AppDelegate.FinishedLaunching (MonoTouch.UIKit.UIApplication app, MonoTouch.Foundation.NSDictionary options) [0x0005e] in /Users/claudio/Projects/FolderNavigation/FolderNavigation/Main.cs:43 
    at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
    at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:26 
    at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in /Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:31 
    at FolderNavigation.Application.Main (System.String[] args) [0x00000] in /Users/claudio/Projects/FolderNavigation/FolderNavigation/Main.cs:14 

任何想法?

問候,
克勞迪奧

回答

1

您是否嘗試過通過在例如窗戶上的.NET代碼來解壓縮文件?也許該文件是由SharpZipLib不支持的某種技術壓縮的?

我判斷的錯誤發生在'ICSharpCode.SharpZipLib.Zip.Compression.Inflater.Decode'方法中,如果您檢查SharpZipLib的源代碼只是解碼癟的字節數組。

+0

是的,是對的。我發現這個錯誤是我下載這個zip文件的時候。當我嘗試使用本地zip文件時,它工作正常。 – Claudio 2011-02-03 00:30:44