2017-01-10 3 views
4

使用技術:C#,IonicZipライブラリ。条件が満たされるまで、複数のファイルをフォルダに圧縮する方法は?

複数のログファイルのリストから(合理的な量のそれぞれ10,000としましょう)。私はこれらのファイルをフォルダ内で圧縮する必要があります。しかし、圧縮されたフォルダのサイズは約4MB未満でなければなりません。 Zip形式のフォルダの最小数はどのように設定できますか。

private static string ZipAndReturnFolderPath(IEnumerable<string> files, string saveToFolder) 
{ 
    int listToSkip = 0; 
    using (var zip = new ZipFile()) 
    { 
     do 
     { 
      zip.AddFiles(files.Skip(listToSkip * 10).Take(10)); 
      zip.Save(saveToFolder); 
      listToSkip++; 
     } 
     while ((new FileInfo(saveToFolder).Length < _lessThan4MB) && totalFilesRemaining > 0);     
    } 
    return saveToFolder; 
} 

ここでは簡潔にするために、私はいくつかのコード行を削除しました。パラメータ:ファイル - 残っている残りのファイルのパスを保持します(これをどのように維持するか心配しないでください)。 saveToFolderは、圧縮されたフォルダの宛先です(これは、関数が呼び出されるたびに一意になります)。

私はこれがうまくいくと思います。私はそれが圧縮されているファイルをチェックし、重複がないことを確認しました。しかし、ファイルをフォルダに圧縮し、条件をチェックしてから、すでに圧縮されたフォルダ内の次の数ファイルに対して同じプロセスを繰り返すことは、良いアプローチであるとは言えません。

私は何か間違っているのですか、これを達成できる効率的な方法はありますか?

+0

[DotNetZipの可能な複製 - C#で保存(ストリーム)を呼び出す前に最終的なジップサイズを計算する](http://stackoverflow.com/questions/10815633/dotnetzip-calculate-final-zip-size-before-calling-savestream -in-c-sharp) –

答えて

関連する問題