gpt4 book ai didi

c# - 将.bz2 流解压缩到 C# 中的文件

转载 作者:太空狗 更新时间:2023-10-29 23:40:06 27 4
gpt4 key购买 nike

我在尝试使用 SharpZipLib 库中的 .bz2 内容时遇到了真正的麻烦,而且我无法在其他地方找到任何帮助。

非常感谢任何帮助或建议,如果有人能指出我可以从中学习的现有解决方案,那就太好了!

下面是我正在尝试做的,但显然它不起作用。目前我遇到的问题是在标记的行上未处理“EndOfStreamException”。代码有点乱,我以前从来没有尝试过做这样的事情......

正如您可能知道的那样,我是在解压缩之前从网上下载的,但我相当确定部分代码可以正常工作。

while ((inputByte = responseStream.ReadByte()) != -1)
{
using (MemoryStream ms = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(ms))
{
writer.Write((byte)inputByte);
}

using (BZip2InputStream unzip = new BZip2InputStream(ms)) //Exception occurs here
{
buffer = new byte[unzip.Length];
unzip.Read(buffer, 0, buffer.Length);
}

using (FileStream fs = new FileStream(fPath, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(buffer, 0, buffer.Length);
}

}
}

最佳答案

您正在使用 using 语句。 using 语句是编译器指令,用于将 try finally 包裹在代码块周围,IDisposible.Dispose() 将在 finally 被执行。

长话短说,在 BinaryWriterBZip2InputStreamFileStream 上调用 dispose 可能会过早地释放父级 MemoryStream.

尝试从 MemoryStream 中删除三个 using block ,看看是否能解决您的问题。

编辑

您的 BinaryWriter 正在将单个 byte 写入 MemoryStream。我认为您不需要为此使用 BinaryWriter,因为 MemoryStream 具有 WriteByte() 方法。

那么您的 BZip2InputStream 正在尝试从 MemoryStream 中读取。但是 MemoryStream 的位置在流的末尾。没有要读取的数据,因此出现 EndOfStreamException

关于c# - 将.bz2 流解压缩到 C# 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998844/

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