当压缩文件达到65536字节时,Ionic.zlib停止压缩? - C#

时间:2011-05-15 13:19:35

标签: c# zlib

嘿,我在使用Ionic.zlib压缩文件时遇到问题,我对C#很新,所以问题可能很容易解决。如果我压缩一个大文件,让我们说大小为500kb,那么一旦压缩文件达到65536字节它将停止,如果我然后解压缩文件,则会丢失大量数据:/。我可以通过将缓冲区设置为4,000,000来解决这个问题,但我听说最好将缓冲区设置为0x4000。

        ZlibStream compressor = new ZlibStream(gsc_stream, CompressionMode.Compress, CompressionLevel.BestCompression, true);
        byte[] buffer = new byte[0x4000];
        Int32 n;

        int previous = Convert.ToInt32(zone.Position);

        while ((n = compressor.Read(buffer, 0, buffer.Length)) != 0)
        {
            zone.Write(buffer, 0, n);

        }
        zone.Flush();
        compressor.Flush();

1 个答案:

答案 0 :(得分:1)

看起来你反过来了。
如果您尝试压缩流gsc_stream中的文件并将结果写入流zone,那么正确的代码将是:

using (ZlibStream compressor = new ZlibStream(zone, CompressionMode.Compress, CompressionLevel.BestCompression, true))
{
    byte[] buffer = new byte[0x4000];
    int n;
    while ((n = gsc_stream.Read(buffer, 0, buffer.Length)) != 0)
    {
        compressor.Write(buffer, 0, n);
    }
    zone.Flush();
    compressor.Flush();
}