【发布时间】:2012-05-16 15:29:53
【问题描述】:
我正在尝试压缩大量数据,有时在 100GB 的区域内,当我运行我编写的例程时,它看起来文件的大小与之前的大小完全相同。 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 个字节是否会导致问题?
【问题讨论】:
-
您的代码是否适用于较小的文件?
-
您能否确认您的代码正确压缩了较小的数据集 - 例如,您知道通常可以很好地压缩的文本文件...
标签: c# gzipstream