GZipStream如何确定压缩数据的大小

时间:2016-03-20 13:23:30

标签: c# gzipstream

我有两个文件(我使用7zip): n1.txt.gz n2.txt.gz 。然后我通过命令提示符将它们组合到文件 n12.txt.gz

type n1.txt.gz > n12.txt.gz
type n2.txt.gz >> n12.txt.gz

如果我通过7zip解压缩文件 n12.txt.gz ,我将获得组合的解压缩原始文件(n1.txt + n2.txt)。 但是,如果我使用此代码

public static void Decompress2(String fileSource, String fileDestination, int buffsize)
{
 using (var fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
 {
  using (var fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
  {
   using (var gzipStream = new GZipStream(fsInput, CompressionMode.Decompress))
   {
    var buffer = new Byte[buffsize];
    int h;
    while ((h = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
    {
     fsOutput.Write(buffer, 0, h);
    }
   }
  }
 }
}

我将只解压缩 n12.txt.gz 的第一部分,即解压缩 n1.txt

为什么GZipStream在组合文件的第一部分后停止? 7zip如何解压缩整个文件?

1 个答案:

答案 0 :(得分:0)

GZipStream没有实现从一个流解压缩多个文件的方法。

尝试使用处理ZIP存档的库,例如DotNetZip

如果您绝对想要使用GZipStream,则可以在输入流中搜索the gzip header,然后仅向属于每个文件的流部分提供GZipStream。