1

ユーザーが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;
        }
4

2 に答える 2

0

彼らのウィキから:

「Sharpzip は、保存された圧縮方法とデフレート圧縮方法の両方を使用する Zip ファイルをサポートし、古い (PKZIP 2.0) スタイルと AES 暗号化もサポートしています」

アップロードされた zip ファイルの形式が SharpZipLib で受け入れられると確信していますか?

于 2012-02-21T14:24:43.643 に答える