gpt4 book ai didi

c# - GZipStream 压缩不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:39:37 27 4
gpt4 key购买 nike

我正在尝试读取文件并使用 GZipStream 压缩它,如下所示:

using (var outStream = new MemoryStream())
{
using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress))
{
fileStream.CopyTo(gzipStream);

Debug.WriteLine(
"Compressed from {0} to {1} bytes",
fileStream.Length,
outStream.Length);

// "outStream" is utilised here (persisted to a NoSql database).
}
}
}

问题是 outStream.Length 总是显示 10 个字节。我做错了什么?

我试过在 fileStream.CopyTo 行之后调用 gzipStream.Close()(如其他论坛中所建议的那样),但这似乎关闭了 outStream 也是,因此使用它的后续代码会失败。

最佳答案

MSDN 说:写操作可能不会立即发生,但会被缓冲,直到达到缓冲区大小或调用 Flush 或 Close 方法。

换句话说,所有的写操作都完成了并不意味着数据已经在MemoryStream中了。您必须先执行 gzipStream.Flush() 或关闭 gzipStream。

例子:

using (var outStream = new MemoryStream())
{
using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress))
{
fileStream.CopyTo(gzipStream);
}

Debug.WriteLine(
"Compressed from {0} to {1} bytes",
fileStream.Length,
outStream.Length);

// "outStream" is utilised here (persisted to a NoSql database).
}
}

此外,理想情况下,也将其放在 FileStream 之外 - 您希望尽快关闭文件,而不是等待其他处理完成。

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

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