4

ご挨拶...

最新のDotNetZipを使用して、c#3.5でバックアッププログラムを作成しています。プログラムの基本は、サーバー上の場所とスパンされたzipファイルの最大サイズを指定して実行することです。そこから、指定された場所からすべてのフォルダー/ファイルをトラバースし、正確な構造を維持しながらアーカイブに追加する必要があります。また、すべてを適切な量に圧縮する必要があります。フォルダー/ファイルの特定の非圧縮コレクションは、簡単に10〜25 GBになる可能性があり、作成されるスパンファイルはそれぞれ約1GBに制限されます。

私はすべてが機能しています(DotNetZipを使用)。私の唯一の課題は、実際に起こっている競争がほとんどないか、まったくないことです。コードを単純化し、一般的にプロジェクトにどれだけ適合しているかを確認するために、「AddDirectory」メソッドを使用することにしました。周りを読んだ後、私はその決定を2番目に推測しています。

  1. 以下のコードとアーカイブ内の大量のファイルを考えると、zipに追加されるときに各ファイルを圧縮する必要がありますか?または、Adddirectoryメソッドはほぼ同じ圧縮を提供する必要がありますか?

  2. Ionic.Zlib.CompressionLevelによって提供されるすべてのレベルの圧縮を試しましたが、どれも役に立たないようです。外部圧縮アルゴリズムを使用して、それをDotNetZipファイルにストリーミングすることを検討する必要がありますか?

using (ZipFile zip = new ZipFile())  
{  
  zip.AddDirectory(root.FullName);  

  if (zipPassword.Length > 0)  
    zip.Password = zipPassword;  

  float size = zipGbSize * 1024 * 1024 * 1024;  

  zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;  
  zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);  
  zip.ZipError += new EventHandler<ZipErrorEventArgs>(Zip_ZipError);  
  zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");  
  zip.MaxOutputSegmentSize = (int)size;   //in gig  
  zip.Name = archiveDir.FullName + @"\Task_" + taskId.ToString() + ".zip";  
  zip.Save();  
}  

助けてくれてありがとう!

4

3 に答える 3

2

あなたの質問を過小評価したかどうかはわかりませんが、zipファイルの最大サイズは4Gbです。ZipFileたぶん、その制限に達するたびに新しいものを作成する必要があります。

それが役に立たない場合は申し訳ありません。

于 2011-01-25T16:25:35.543 に答える
2

1.以下のコードとアーカイブ内の大量のファイルを考えると、zipに追加されるときに各ファイルを圧縮する必要がありますか?

DotNetZipが機能する方法は、アーカイブに追加されるときに各ファイルを圧縮することです。アプリは圧縮を行う必要はありません。DotNetZipがこれを行います。

または、Adddirectoryメソッドはほぼ同じ圧縮を提供する必要がありますか?

AddDirectory()メソッドを介してzipファイルに追加されたエントリは、AddFile()を介して追加されたエントリと同じコードパスを経由して、zipアーカイブが書き込まれます。ファイルデータは圧縮され、オプションで暗号化されてから、zipファイルに書き込まれます。


未承諾のヒント:行う必要はありません:

zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);   

あなたはただすることができます:

zip.AddProgress += Zip_AddProgress;   

圧縮が発生していないことをどのように判断していますか?

各エントリの圧縮について知りたい場合は、SaveProgressイベントハンドラーを登録できます。SaveProgressイベントは、保存の開始時、DotNetZipが1つのエントリのデータの書き込みを開始したとき、1つのエントリの書き込み中のさまざまな間隔、各エントリのデータの書き込み終了後など、アーカイブの書き込み中のさまざまな時点で発生します。すべてのデータの書き込みが終了した後。これらのステージは、ZipProgressEventType列挙で説明されています。EventTypeがSaving_AfterWriteEntryの場合、その特定のエントリの圧縮率を計算できます。

圧縮が発生していないことを確認するには、そのようなSaveProgressイベントを登録して、その圧縮率を確認することをお勧めします。

また、前述のように、一部のファイルタイプは圧縮できません。JPG、MPG、MP3、ZIPファイルなどはあまり圧縮できません。


最後に、DotNetZipコマンドラインツールを使用するだけで、バックアップを実行する方がはるかに簡単な場合があります。特定のディレクトリをバックアップするだけの場合は、コマンドラインツール(zipit.exe)を使用して、プログラムの作成を回避できます。zipit.exeツールでは、-vオプションを使用すると、ツールは進行状況レポートを印刷し、上記のメカニズムを介して各エントリの圧縮を表示します。独自のプログラムを作成する場合でも、zipit.exeを使用して、DotNetZipを使用するときに圧縮が発生しているかどうかを確認することを検討してください。

于 2011-01-31T00:22:41.363 に答える
1

どのような種類のデータを圧縮していますか?JPEGやすでに圧縮されているZIPファイルなど、一部の種類のデータは十分に圧縮されません。

于 2011-01-25T16:59:57.880 に答える