2017-01-10 9 views
4

Используемая технология: 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-файлом (это будет уникально при каждом вызове функции).

Я считаю, что это работает. Я проверил файлы, которые он застегнул, и там я не нахожу дублирования. Но, застегивая файлы в папку, проверяя условие, а затем снова повторяя тот же процесс для следующих нескольких файлов в уже заархивированной папке, не кажется хорошим подходом.

Я делаю что-то неправильно или есть эффективный способ добиться этого?

+0

Возможный дубликат [DotNetZip - Рассчитать окончательный размер zip перед вызовом Save (stream) в C#] (http://stackoverflow.com/questions/10815633/dotnetzip-calculate-final-zip-size-before-calling-savestream -в-с-диез) –

ответ

0

Я думаю, что вам нужно answered here already, используя ZipOutputStream может быть то, что вам нужно.

Смежные вопросы