2

我正在一个系统上工作,我有一个流(可搜索),我从中读取 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");
            }
        }
    }
}

4

1 回答 1

5

这样做会导致文件损坏。

所以,不要那样做。

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

您将不得不写入一个新的“文件”,完成后删除旧文件并重命名。

于 2011-11-13T21:23:51.043 回答