Как заархивировать несколько файлов в папку, пока не будет выполнено условие?
Используемая технология: C#, библиотека IonicZip.
Из списка нескольких файлов журнала (скажем, 10000, каждый из которых имеет разумный размер). Я должен сжать эти файлы в папке. Но тогда размер архива должен быть примерно 4 МБ. Как я могу иметь минимально возможное количество заархивированных папок.
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 - это место назначения для заархивированной папки (это будет уникальным при каждом вызове функции).
Я считаю, что это работает. Я проверил файлы, которые он архивировал, и там я не вижу дублирования. Но, сжатие файлов в папку, проверка состояния, а затем повторение того же процесса для следующих нескольких файлов в уже заархивированной папке не кажется хорошим подходом.
Я делаю что-то не так или есть эффективный способ, которым я могу добиться этого?
1 ответ
Я думаю, что вы уже получили ответ здесь, используя ZipOutputStream
может быть то, что вы после.