我正在开发一个系统,我有一个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");
}
}
}
}
答案 0 :(得分:5)
这样做会导致文件损坏。
所以,不要这样做。
Zip档案是一种复杂的格式,它们不支持读/写流。
您必须写入新的'文件',完成后删除旧文件并重命名。