大量のデータを圧縮しようとしていますが、100 GB程度の場合もありますが、作成したルーチンを実行すると、ファイルが以前のサイズとまったく同じサイズで出力されるように見えます。他の誰かがGZipStreamでこの問題を抱えていましたか?
私のコードは次のとおりです。
byte[] buffer = BitConverter.GetBytes(StreamSize);
FileStream LocalUnCompressedFS = File.OpenWrite(ldiFileName);
LocalUnCompressedFS.Write(buffer, 0, buffer.Length);
GZipStream LocalFS = new GZipStream(LocalUnCompressedFS, CompressionMode.Compress);
buffer = new byte[WriteBlock];
UInt64 WrittenBytes = 0;
while (WrittenBytes + WriteBlock < StreamSize)
{
fromStream.Read(buffer, 0, (int)WriteBlock);
LocalFS.Write(buffer, 0, (int)WriteBlock);
WrittenBytes += WriteBlock;
OnLDIFileProgress(WrittenBytes, StreamSize);
if (Cancel)
break;
}
if (!Cancel)
{
double bytesleft = StreamSize - WrittenBytes;
fromStream.Read(buffer, 0, (int)bytesleft);
LocalFS.Write(buffer, 0, (int)bytesleft);
WrittenBytes += (uint)bytesleft;
OnLDIFileProgress(WrittenBytes, StreamSize);
}
LocalFS.Close();
fromStream.Close();
StreamSizeは、ファイルのサイズを保持する8バイトのUInt64値です。これらの8バイトをファイルの先頭に生で書き込むので、元のファイルサイズがわかります。Writeblockの値は32kb(32768バイト)です。fromStreamは、この場合はFileStreamからデータを取得するためのストリームです。圧縮データの前の8バイトで問題が発生しますか?