Ionic.zlib在压缩文件达到65536字节时停止压缩?-C#
嘿,我在用Ionic.zlib压缩文件时遇到问题,我对C#很陌生,所以这个问题可能很容易解决。如果我压缩一个大文件,比如说500kb大小,那么一旦压缩文件达到65536字节,它就会停止,如果我解压缩文件,就会丢失很多数据:/。我可以通过将缓冲区设置为4000000来解决这个问题,但我听说最好将其设置为0x4000Ionic.zlib在压缩文件达到65536字节时停止压缩?-C#,c#,zlib,C#,Zlib,嘿,我在用Ionic.zlib压缩文件时遇到问题,我对C#很陌生,所以这个问题可能很容易解决。如果我压缩一个大文件,比如说500kb大小,那么一旦压缩文件达到65536字节,它就会停止,如果我解压缩文件,就会丢失很多数据:/。我可以通过将缓冲区设置为4000000来解决这个问题,但我听说最好将其设置为0x4000 ZlibStream compressor = new ZlibStream(gsc_stream, CompressionMode.Compress, Compres
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();
看起来你的情况正好相反。
如果您试图压缩流
gsc\u流中的文件
,并将结果写入流区域
,则正确的代码为:
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();
}
甚至没有zlib头了,它压缩了我没有告诉它的部分I文件。嘿,至少它完成了65536个字节。区域中的顶部不会被压缩,只要第一个gsc_流写入文件,文件的其余部分就会被压缩,除了它在位置区域之前开始压缩,正如我所说,根本没有zlib头。@Levi
gsc_-stream
应该类似于:gsc_-stream=System.IO.File.OpenRead(fileToCompress)代码>这意味着打开gsc_流,并将其压缩版本写入区域,下面是我将gsc文件写入区域的全部功能。我按照你说的做了,并将flushmode设置为partial,但现在它只压缩75k字节:/。