Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic.zlib在压缩文件达到65536字节时停止压缩?-C#_C#_Zlib - Fatal编程技术网

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

Ionic.zlib在压缩文件达到65536字节时停止压缩?-C#,c#,zlib,C#,Zlib,嘿,我在用Ionic.zlib压缩文件时遇到问题,我对C#很陌生,所以这个问题可能很容易解决。如果我压缩一个大文件,比如说500kb大小,那么一旦压缩文件达到65536字节,它就会停止,如果我解压缩文件,就会丢失很多数据:/。我可以通过将缓冲区设置为4000000来解决这个问题,但我听说最好将其设置为0x4000 ZlibStream compressor = new ZlibStream(gsc_stream, CompressionMode.Compress, Compres

嘿,我在用Ionic.zlib压缩文件时遇到问题,我对C#很陌生,所以这个问题可能很容易解决。如果我压缩一个大文件,比如说500kb大小,那么一旦压缩文件达到65536字节,它就会停止,如果我解压缩文件,就会丢失很多数据:/。我可以通过将缓冲区设置为4000000来解决这个问题,但我听说最好将其设置为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();

看起来你的情况正好相反。
如果您试图压缩流
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字节:/。