gpt4 book ai didi

c# - GZipStream 只解压第一行

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:31 29 4
gpt4 key购买 nike

我的 GZipStream 只会解压缩文件的第一行。通过 7-zip 提取内容按预期工作并为我提供了整个文件内容。它还在 cygwin 和 linux 上使用 gunzip 按预期提取,所以我希望这是特定于 O/S (Windows 7) 的。

我不确定如何解决这个问题,所以任何有关这方面的提示都会对我有很大帮助。听起来很像 this ,但使用 SharpZLib 会产生同样的结果。

这是我正在做的:

var inputFile = String.Format(@"{0}\{1}", inputDir, fileName);
var outputFile = String.Format(@"{0}\{1}.gz", inputDir, fileName);
var dcmpFile = String.Format(@"{0}\{1}", outputDir, fileName);

using (var input = File.OpenRead(inputFile))
using (var fileOutput = File.Open(outputFile, FileMode.Append))
using (GZipStream gzOutput = new GZipStream(fileOutput, CompressionMode.Compress, true))
{
input.CopyTo(gzOutput);
}

// Now, decompress
using (FileStream of = new FileStream(outputFile, FileMode.Open, FileAccess.Read))
using (GZipStream ogz = new GZipStream(of, CompressionMode.Decompress, false))
using (FileStream wf = new FileStream(dcmpFile, FileMode.Append, FileAccess.Write))
{
ogz.CopyTo(wf);
}

最佳答案

您的输出文件仅包含一行(gzipped)- 但它包含所有换行符以外的文本数据。

您重复调用 ReadLine(),它返回一行文本没有换行符,并将该文本转换为字节。因此,如果您有一个输入文件,其中包含:

abc
def
ghi

你最终会得到一个输出文件,它是

的压缩版本
abcdefghi

如果您不想要这种行为,为什么还要首先通过 StreamReader 呢?只需一次从输入 FileStream 直接复制到 GZipStream 一个 block ,或者如果您使用的是 .NET 4,则使用 Stream.CopyTo :

// Note how much simpler the code is using File.*
using (var input = File.OpenRead(inputFile))
using (var fileOutput = File.Open(outputFile, FileMode.Append))
using (GZipStream gzOutput = new GZipStream(os, CompressionMode.Compress, true))
{
input.CopyTo(gzOutput);
}

另请注意,将附加到压缩文件很少是一个好主意,除非您对单个文件中的多个“ block ”进行了某种特殊处理。

关于c# - GZipStream 只解压第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214534/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com