2011-11-13 10 views
2

私は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

:これは、次のコードを使用して実証することができます。

だから、しないでください。

ジップアーカイブは複雑な形式ですが、読み取り/書き込みストリームをサポートしていません。

新しい 'ファイル'に書き込む必要があります。完了すると古いものを削除して名前を変更します。

+0

パフォーマンス面では、ZIPファイルが仮想ファイルシステムとして使用され、頻繁に書かれ、非常に大容量(50GB以上)になるので、これは最適な解決策ではありません。そのような大量のデータを一度にコピーすることは、明らかな理由から、良い考えではありません。 – IDWMaster

+0

50GBの_mutating_データをzipファイルに保存するのは良い考えではありません。 –

+0

おそらく、自分のファイルシステムを書くのが最善でしょうか? – IDWMaster

関連する問題