c# - 使用 GZipStream 压缩

标签 c# .net

我想了解为什么我的代码没有按预期执行。它创建一个 GZipStream,然后将对象作为压缩文件保存在我的硬盘上,但保存的文件始终为 0 字节。

现在我知道如何save a file using GZipStream ,但是,我的问题不是如何去做。我的问题纯粹是为什么这段代码保存了 0 个字节(或者为什么 FileStream 工作而内存不工作)。

private void BegingCompression()
{
    var bytes = File.ReadAllBytes(this.fileName);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        ms.ReadByte();
        using (FileStream fs =new FileStream(this.newFileName, FileMode.CreateNew))
        using (GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress, false))
        {
            zipStream.Write(bytes, 0, bytes.Length);
        }
    }
}

关于源代码,this.fileName = c:\Audio.wavnewFileNamec:\Audio.wav.gz(但也尝试过 c:\audio.gz)

最佳答案

  • 您不需要 MemoryStream,因为 bytes 已经有要压缩的数据。
  • 不应使用
  • ms.ReadByte()
  • 创建 zipStream 时,应使用输出文件流。

试试这个:

var bytes = File.ReadAllBytes(this.fileName);
using (FileStream fs =new FileStream(this.newFileName, FileMode.CreateNew))
using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress, false))
{
     zipStream.Write(bytes, 0, bytes.Length);
}

编辑

原始代码创建了一个零长度文件,因为您没有写入文件流。

关于c# - 使用 GZipStream 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297077/

相关文章:

.net - 使用强名称签名如何防止伪造一组程序集?

c# - 如何提供可以正确定位.NET Dll作为COM提供程序的私有(private)并排 list ?

c# - 如何根据某些属性选择 xml 元素并将其完整写回另一个文件

c# - 如何将 .wav 格式的声音附加到彼此

c# - 进行异步 Web 服务调用和在另一个线程中进行同步 Web 服务调用有什么区别?

c# - 为什么 ASP.NET 会终止异步请求?

c# - 确定某人是否打开了网页

c# - 防止任何子类覆盖/隐藏方法 c#;为父类(super class)保留方法签名

c# - 分割太长的字符串

C# 按值复制数组