C # - Autozip файлы в папке на основе год-месяц - PullRequest
0 голосов
/ 11 сентября 2009

ИТ-отделу поручено снизить частоту использования файлового сервера, поэтому я хотел бы внести свой вклад в сжатие старых файлов (например, Excel / Access / Txt).

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

Есть ли способ использовать C # для чтения каталога и архивирования файлов в группы год-месяц (все файлы из года-месяца, помещенные вместе в один zip)?

Или лучше использовать скрипт типа AutoIT?

Или уже существуют программы для этого, поэтому мне не нужно ничего кодировать?

Ответы [ 3 ]

4 голосов
/ 11 сентября 2009

Я не уверен, что ваш вопрос касается архивирования, выбора файлов определенного года / месяца или обоих.

Про зиппинг Петр уже упоминал 7-zip и SharpZipLib. У меня есть только один опыт работы с последним, но с ним все хорошо, с ним легко работать.

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

псевдо:

var files = new Dictionary<DateTime, IList<string>>();
foreach (var file in Directory.GetFiles(...)) {
   var fi = new FileInfo(file);
   var date = fi.CreatedDate();
   var groupDate = new DateTime(date.Year, date.Month);

   if (!files.ContainsKey(groupDate)) files.Add(groupDate, new Collection<string>());

   files[groupDate].Add(file);
}

теперь у вас должен быть словарь, содержащий отдельные ключи года / месяца, а foreach - список файлов, принадлежащих этой группе. Так что на молнии

Псевдо:

foreach (var entry in files) {
   var date = entry.Key;
   var list = entry.Value;

   // create zip-file named date.ToString();
   foreach (var file in list) {
      // add file to zip
   } 
}
2 голосов
/ 11 сентября 2009

Вы можете использовать System.IO.Directory.GetFiles () для циклического просмотра файлов в каждом каталоге, разбора по имени файла и добавления их в объект 7-zip или SharpZipLib. Если это тысячи файлов, возможно, было бы лучше добавить их в службу или какую-то запланированную задачу для выполнения в одночасье, чтобы не облагать налогом файловый ресурс.

Удачи тебе!

РЕДАКТИРОВАТЬ: В качестве дополнения вы можете использовать объект System.IO.FileInfo для каждого файла, если вам нужно проанализировать по дате создания или другой файл attirbutes.

2 голосов
/ 11 сентября 2009

Конечно, вы можете сделать это с небольшим количеством C # и такими библиотеками, как 7-zip или SharpZipLib .

...