C# 在C中将.bz2流解压缩到文件#
我在尝试使用SharpZipLib库中的.bz2内容时遇到了真正的困难,我在其他地方找不到任何帮助 任何帮助或建议都将不胜感激,如果有人能告诉我一个现有的解决方案,我可以从中学习,那将是非常棒的 下面是我试图做的,但显然它不起作用。目前我遇到的问题是在标记行上未处理“EndOfStreamException”。代码有点乱七八糟,我以前从未尝试过这样做 正如您可能知道的那样,我在解压缩之前是从网上下载的,但我相当确信部分代码工作正常C# 在C中将.bz2流解压缩到文件#,c#,sharpziplib,bzip2,C#,Sharpziplib,Bzip2,我在尝试使用SharpZipLib库中的.bz2内容时遇到了真正的困难,我在其他地方找不到任何帮助 任何帮助或建议都将不胜感激,如果有人能告诉我一个现有的解决方案,我可以从中学习,那将是非常棒的 下面是我试图做的,但显然它不起作用。目前我遇到的问题是在标记行上未处理“EndOfStreamException”。代码有点乱七八糟,我以前从未尝试过这样做 正如您可能知道的那样,我在解压缩之前是从网上下载的,但我相当确信部分代码工作正常 while ((inputByte = responseStre
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);
}
}
}
您正在使用
语句<代码>使用
语句是编译器指令,用于将try finally
包装在代码块周围,执行finally
时将调用IDisposable.Dispose()
长话短说,在BinaryWriter
上调用dispose、BZip2InputStream
和FileStream
可能过早地处理父内存流
尝试使用MemoryStream
中的块删除这三个,看看这是否解决了您的问题
编辑
您的二进制编写器
正在向内存流
写入单个字节
。我认为您不需要一个BinaryWriter
,因为MemoryStream
有一个WriteByte()
方法
然后,您的BZip2InputStream
正在尝试从MemoryStream
读取。但是MemoryStream
的位置在流的末尾。没有数据可读取,因此EndOfStreamException
OP的代码中有两个问题第一个,正如Jason Whitted提到的,使用二进制编写器的代码块
会导致内存流
实例的处理,因此我们应该删除该块,因为内存流
本身有一个写入
方法,这可以通过以下方式以最干净的方式实现:
var ms = new MemoryStream();
ms.Write(inputBytes,0,inputBytes.Length);
第二个问题是,当我们写入MemoryStream
实例(ms)时,我们会到达它的末尾,因此在尝试使用BZip2InputStream
之前,我们必须将位置更改回内存流的开头:
ms.Seek(0, SeekOrigin.Begin); //THIS IS NECESSARY to change the position to the beginning
byte[] buffer = null;
using (var bz2InputStream = new BZip2InputStream(ms))
{
buffer = new byte[bz2InputStream.Length];
bz2InputStream.Read(buffer, 0, buffer.Length);
}
只是尝试了这个,不幸的是,这似乎并没有真正解决问题,但我甚至没有考虑到这一点。谢谢您的建议。您仍然收到EndOfStreamException
?是哪一行?是的,对不起。创建BZIP2InputStream时,它与以前完全相同。我相信上次我查看SharpZipLib时,它不再受支持。而IIRC无论是打包还是解包都表现得非常糟糕。我见过的最流行的免费.NETZIP库是。我不确定这是否是一个选择,但它可能值得研究。哦,哇,是的,我现在明白你的意思了。。。非常好的帮助,非常感谢!现在都开始工作了!