ユーザーがZIPファイルをアップロードできるASP.NETのアプリケーションがあります。ICSharpZipLib を使用してファイルを抽出しようとしています (DotNetZip も試しましたが、同じ問題がありました)。
この zip ファイルには、単一の xml ドキュメント (圧縮前に 9KB) が含まれています。
デスクトップ上の他のアプリケーション (7zip、Windows エクスプローラー) でこのファイルを開くと、問題ないようです。私の unzip メソッドは System.OutOfMemoryException をスローしますが、その理由がわかりません。解凍方法をデバッグしたところ、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;
}