2012-02-21 1 views
0

У меня есть приложение в ASP.NET, где пользователь может загружать ZIP-файл. Я пытаюсь извлечь файл с помощью ICSharpZipLib (я также попробовал DotNetZip, но имел такую ​​же проблему).ICSharpZipLib - проблема с распаковкой файла

Этот zip-файл содержит один XML-документ (9 КБ перед сжатием).

Когда я открываю этот файл с другими приложениями на своем рабочем столе (7zip, windows explorer), кажется, все в порядке. Мой метод распаковки бросает System.OutOfMemoryException, и я понятия не имею, почему это так. Когда я отлажена мой метод unziping я заметил, что zipInputStreams' свойство Length бросает исключение и не доступен:

Stream UnZipSingleFile(Stream memoryStream) 
     { 

      var zipInputStream = new ZipInputStream(memoryStream); 

      memoryStream.Position = 0; 

      zipInputStream.GetNextEntry(); 

      MemoryStream unzippedStream = new MemoryStream(); 

      int len; 
      byte[] buf = new byte[4096]; 
      while ((len = zipInputStream.Read(buf, 0, buf.Length)) > 0) 
      { 
       unzippedStream.Write(buf, 0, len); 
      } 

      unzippedStream.Position = 0; 
      memoryStream.Position = 0; 

      return unzippedStream; 
    } 

и вот как я получаю строку unzippedStream:

string GetString() 
     { 
      var reader = new StreamReader(unzippedStream); 
      var result = reader.ReadToEnd(); 
      unzippedStream.Position = 0; 
      return result; 
     } 
+0

Попробуйте использовать 'string result = System.Text.Encoding.Default.GetString (unzippedStream);', поскольку он, вероятно, закодирован и приводит к тому, что вы видите в текущем результате. –

+0

Является ли 'unzippedStream' собственностью вашего класса? Как это получается для 'GetString()'? Мне интересно, где-то вы столкнулись с именем. Можете ли вы опубликовать метод, который вызывает 'GetString()'? –

+0

Как вы называете эти 2 метода? Не могли бы вы показать пример? –

ответ

0

С их вики:

«Sharpzip поддерживает файлы Zip с использованием как методов хранения, так и дефляции, а также поддерживает старый стиль (PKZIP 2.0) и шифрование AES»

Вы уверены, что формат загруженного zip-файла допустим для SharpZipLib?

+0

Нет, я не, и не могу быть. Вы, возможно, получили очко. У меня нет возможности влиять на пользователей, которые они выбирают. – TrN

+0

hm ... nope, этот является defite – TrN

+0

В своих [примерах] (http://wiki.sharpdevelop.net/SharpZipLib-Zip-Samples.ashx) они используют StreamUtils.Copy для распаковки при использовании ZipInputStream. Возможно, этот метод вернет некоторый намек, если он не сработает. – Steve