У меня есть приложение в ASP.NET, где пользователь может загрузить ZIP-файл. Я пытаюсь извлечь файл с помощью ICSharpZipLib (я также пытался DotNetZip, но была та же проблема).
Этот zip-файл содержит один XML-документ (9 КБ перед сжатием).
Когда я открываю этот файл с другими приложениями на моем рабочем столе (7zip, windows explorer), кажется, все в порядке.
Мой метод распаковки выдает System.OutOfMemoryException, и я понятия не имею, почему это так. Когда я отладил свой метод распаковки, я заметил, что свойство Length zipInputStreams выбрасывает Exception и недоступно:
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;
}