GZipStream如何判断压缩数据的大小
How does GZipStream determine the size of compressed data
我有两个文件(我使用 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如何解压整个文件?
GZipStream 没有实现从一个流中解压多个文件的方法。
尝试使用处理 ZIP 存档的库,例如 DotNetZip。
如果您绝对想使用 GZipStream,您可以在输入流中搜索 the gzip header,然后仅将属于每个文件的流部分提供给 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如何解压整个文件?
GZipStream 没有实现从一个流中解压多个文件的方法。
尝试使用处理 ZIP 存档的库,例如 DotNetZip。
如果您绝对想使用 GZipStream,您可以在输入流中搜索 the gzip header,然后仅将属于每个文件的流部分提供给 GZipStream。