Используемая технология: C#, IonicZip библиотека.Как закрепить несколько файлов в папке до тех пор, пока не будет выполнено условие?
Из списка нескольких файлов журнала (скажем, 10 000, каждый из разумного размера). Я должен закрепить эти файлы в папке. Но тогда размер zip-папки должен быть примерно ниже 4 МБ. Как я могу иметь минимально возможное количество 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 - это назначение для папки с zip-файлом (это будет уникально при каждом вызове функции).
Я считаю, что это работает. Я проверил файлы, которые он застегнул, и там я не нахожу дублирования. Но, застегивая файлы в папку, проверяя условие, а затем снова повторяя тот же процесс для следующих нескольких файлов в уже заархивированной папке, не кажется хорошим подходом.
Я делаю что-то неправильно или есть эффективный способ добиться этого?
Возможный дубликат [DotNetZip - Рассчитать окончательный размер zip перед вызовом Save (stream) в C#] (http://stackoverflow.com/questions/10815633/dotnetzip-calculate-final-zip-size-before-calling-savestream -в-с-диез) –