小编Jen*_*s H的帖子

C#.NET为什么在解压缩流时需要Stream.Seek

我正在开发一个项目,我需要能够解压缩流和字节数组以及压缩它们.我正在运行一些单元测试,从流中创建Zip然后解压缩它们,当我解压缩它们时,DonNetZip将它们视为拉链的唯一方法就是我运行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;
    }
Run Code Online (Sandbox Code Playgroud)

解压缩对象:

 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);
            } …
Run Code Online (Sandbox Code Playgroud)

.net c# zip unzip dotnetzip

4
推荐指数
1
解决办法
1286
查看次数

标签 统计

.net ×1

c# ×1

dotnetzip ×1

unzip ×1

zip ×1