9

gzip で圧縮されたファイルをダウンロードして解凍するコードがいくつかあります。問題は、ファイル全体を解凍できないことです。最初の 4096 バイトしか読み取らず、さらに約 500 バイトしか読み取れません。

Byte[] buffer = new Byte[4096];
int count = 0;
FileStream fileInput = new FileStream("input.gzip", FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fileOutput = new FileStream("output.dat", FileMode.Create, FileAccess.Write, FileShare.None);
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress, true);

// Read from gzip steam
while ((count = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
{
    // Write to output file
    fileOutput.Write(buffer, 0, count);
}

// Close the streams
...

ダウンロードしたファイルを確認しました。圧縮すると 13MB になり、1 つの XML ファイルが含まれます。XML ファイルを手動で解凍したところ、コンテンツはすべてそこにあります。しかし、このコードで実行すると、XML ファイルの最初の部分しか出力されません。

なぜこれが起こっているのでしょうか?

4

4 に答える 4

4

編集

GZipStreamを開いたままにしないでください。

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress,  
                                                                         false);

また

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress);
于 2010-06-18T09:23:26.217 に答える
1

GZipStreamの代わりにgzip実行可能ファイルを使用して解凍を行うことになりました。何らかの理由でファイルを処理できませんが、実行可能ファイルは処理できます。

于 2010-06-18T12:06:59.160 に答える
0

通話中ですか、CloseそれともFlushオンfileOutputですか? using(または、推奨される方法である でラップするだけです。) そうしないと、プログラムの終了時にファイルがディスクにフラッシュされない可能性があります。

于 2010-06-18T09:45:14.330 に答える