使用するテクノロジー: C#、IonicZipライブラリ。
複数のログ ファイルのリストから (それぞれ妥当なサイズの 10,000 としましょう)。これらのファイルをフォルダーに圧縮する必要があります。ただし、圧縮されたフォルダーのサイズは約 4MB 未満である必要があります。圧縮されたフォルダーの数を最小限に抑えるにはどうすればよいですか。
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;
}
ここでは、簡潔にするために、数行のコードを削除しています。パラメータ: files - 圧縮する残りのファイルの合計パスを保持します (どのように維持するかは心配しないでください)。saveToFolderは、圧縮されたフォルダーの宛先です (これは、関数が呼び出されるたびに一意になります)。
私はこれがうまくいくと信じています。圧縮されているファイルを確認しましたが、重複は見つかりませんでした。ただし、ファイルをフォルダーに圧縮し、状態を確認してから、既に圧縮されたフォルダー内の次のいくつかのファイルに対して同じプロセスを繰り返すことは、良いアプローチとは思えません。
私は何か間違ったことをしていますか、それともこれを達成できる効率的な方法はありますか?