DotNetZip - 如何在不创建单独文件的情况下保存回原始流

时间:2011-11-13 21:16:42

标签: c# .net stream dotnetzip

我正在开发一个系统,我有一个Stream(可以搜索)我正在读取ZIP文件,然后我将修改后的ZIP文件写回该流。这样做会导致文件损坏。这可以使用以下代码演示:


using System;
using System.Collections.Generic;
using System.Text;
using Ionic.Zip;
using System.Windows.Forms;
using System.IO;
namespace ziptester
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            OpenFileDialog mdlg = new OpenFileDialog();
            mdlg.ShowDialog();
            Stream fstream = File.Open(mdlg.FileName,FileMode.Open,FileAccess.ReadWrite);
            ZipFile mfile = ZipFile.Read(fstream);
            mfile.UpdateEntry("test.txt", new byte[500]);
            fstream.Position = 0;
            mfile.SaveProgress += new EventHandler(mfile_SaveProgress);
            mfile.Save(fstream);


            Console.ReadKey();
        }

        static void mfile_SaveProgress(object sender, SaveProgressEventArgs e)
        {
            if (e.EventType == ZipProgressEventType.Saving_Completed)
            {
                Console.WriteLine("Save completed");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:5)

  

这样做会导致文件损坏。

所以,不要这样做。

Zip档案是一种复杂的格式,它们不支持读/写流。

您必须写入新的'文件',完成后删除旧文件并重命名。