【发布时间】:2013-09-26 12:22:30
【问题描述】:
我正在做一个项目,我需要能够解压缩流和字节数组以及压缩它们。我正在运行一些单元测试,从流中创建 Zip 然后解压缩它们,当我解压缩它们时,DonNetZip 将它们视为 zip 的唯一方法是运行 streamToZip.Seek(o,SeekOrigin.Begin) 和 streamToZip.Flush()。如果我不这样做,我会在ZipFile.Read(stream) 上收到错误“无法读取块,无数据”。
我想知道是否有人可以解释为什么会这样。我看过一些关于使用它来实际设置相对读取位置的文章,但没有一篇文章能真正解释为什么在这种情况下需要它。
这是我的代码:
压缩对象:
public Stream ZipObject(Stream data)
{
var output = new MemoryStream();
using (var zip = new ZipFile())
{
zip.AddEntry(Name, data);
zip.Save(output);
FlushStream(output);
ZippedItem = output;
}
return output;
}
解压对象:
public List<Stream> UnZipObject(Stream data)
{
***FlushStream(data); // This is what I had to add in to make it work***
using (var zip = ZipFile.Read(data))
{
foreach (var item in zip)
{
var newStream = new MemoryStream();
item.Extract(newStream);
UnZippedItems.Add(newStream);
}
}
return UnZippedItems;
}
我必须添加的刷新方法:
private static void FlushStream(Stream stream)
{
stream.Seek(0, SeekOrigin.Begin);
stream.Flush();
}
【问题讨论】:
-
在哪里,用什么
Stream,你打电话给UnZipObject?而且,你对Stream之前调用UnZipObject做了什么? -
ZippedItem = output;是做什么的?
标签: c# .net zip unzip dotnetzip