我正在做一个项目,我需要能够解压缩流和字节数组以及压缩它们。我正在运行一些单元测试,从流中创建 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();
}