2011-11-13 75 views
2

我正在一個系統,我有一個流(這是可搜索的),我正在閱讀一個ZIP文件,然後我正在寫修改的ZIP文件返回到該流。這樣做會導致文件損壞。這可以用下面的代碼來證明:
DotNetZip - 如何保存回原始流而不創建一個單獨的文件

 

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

爲什麼downvote? – IDWMaster

回答

5

這樣做會損壞的文件的結果。

所以,不要這樣做。

Zip檔案是一種複雜的格式,它們不支持讀/寫流。

你將不得不寫入一個新的'文件',並在完成時刪除舊的和重命名。

+0

性能方面,這不是最好的解決方案,因爲ZIP文件將被用作虛擬文件系統,並且會被頻繁地寫入,並且會非常大(超過50GB)。一次複製如此大量的數據不是一個好主意,原因很明顯。 – IDWMaster

+0

在壓縮文件中保存50GB的_mutating_數據不是一個好主意,不。 –

+0

也許最好是寫自己的文件系統? – IDWMaster

相關問題