我想了解为什么我的代码没有按预期执行。它创建一个 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.wav
而newFileName
是c:\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/