У меня есть приложение в 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;
}
Попробуйте использовать 'string result = System.Text.Encoding.Default.GetString (unzippedStream);', поскольку он, вероятно, закодирован и приводит к тому, что вы видите в текущем результате. –
Является ли 'unzippedStream' собственностью вашего класса? Как это получается для 'GetString()'? Мне интересно, где-то вы столкнулись с именем. Можете ли вы опубликовать метод, который вызывает 'GetString()'? –
Как вы называете эти 2 метода? Не могли бы вы показать пример? –