【问题标题】:How to write binary data from GZipStream after decompression to a file as binary data in C# .NET 2.0如何在 C# .NET 2.0 中将解压后 GZipStream 中的二进制数据作为二进制数据写入文件
【发布时间】:2015-01-29 10:20:18
【问题描述】:

如何在 C# .NET 2.0 中将解压后 GZipStream 中的二进制数据作为二进制数据写入文件:

FileStream fileStream = new FileStream("compressed_file.zip", FileMode.Open, FileAccess.Read);
GZipStream compressionStream = new GZipStream(fileStream, CompressionMode.Decompress);

//Now how to save uncompressed binary data in "compressionStream" as a file ???

【问题讨论】:

标签: c# gzipstream


【解决方案1】:

它是一个两行解决方案,您只需将压缩流复制到文件流。

using (FileStream outFile = new FileStream(sOutFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
                  CopyStream(compressionStream, outFile);

好的,你需要确保你在compressionStream的开头,所以添加

compressionStream.Seek(0, SeekOrigin.Begin);

可能是必要的。

编辑:

抱歉,copyTo 的实现应该是这样的:

public void CopyStream(Stream source, Stream destination, int bufferSize = 81920)
{
    byte[] buffer = new byte[bufferSize];
    int read;
    while ((read = source.Read(buffer, 0, buffer.Length)) != 0)
        destination.Write(buffer, 0, read);
}

编辑2:

.Net4.5实现中的默认bufferSize定义如下:

private const int _DefaultCopyBufferSize = 81920;

完整源代码referencesource.microsoft.com

【讨论】:

  • 我使用的是 .NET 2.0,CopyTo 在 .NET 2.0 中不可用
  • bufferSize 应该是多少?文件/流的大小可以是 5 MB 到 50 MB
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2018-09-04
  • 2014-10-05
  • 2014-09-29
  • 1970-01-01
相关资源
最近更新 更多