Question

Le service informatique ayant pour tâche de réduire le taux d'utilisation du serveur de fichiers, j'aimerais compresser les anciens fichiers (par exemple, Excel / Access / Txt).

Certains dossiers contiennent des milliers de fichiers. Par conséquent, je ne souhaite pas simplement compresser tout le répertoire en un seul fichier volumineux. Il serait préférable de disposer de plusieurs fichiers plus petits pour faciliter la tâche de l'utilisateur. trouver le «seau de données» qu'ils recherchent.

Existe-t-il un moyen d'utiliser C # pour parcourir un répertoire et compresser les fichiers en groupes année-mois (tous les fichiers de l'année-mois sont regroupés dans un fichier zip)?

Ou serait-il préférable d'utiliser un script tel que AutoIT?

Ou existe-t-il déjà des programmes existants pour le faire, de sorte que je n'ai rien à coder?

Était-ce utile?

La solution

Je ne sais pas si votre question concerne la compression, la sélection de fichiers d'une année / d'un mois en particulier, ou les deux.

À propos de la compression de fichiers Peter a déjà mentionné 7-zip et SharpZipLib. Personnellement, je n’ai que l’expérience de ces derniers, mais c’est positif, il est facile de travailler avec.

À propos du regroupement de vos fichiers, vous pouvez le faire en itérant tous les fichiers du dossier et en les regroupant par date de création ou par date de dernière modification.

pseudo:

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);
}

Maintenant, vous devriez avoir un dictionnaire contenant des clés année / mois distinctes et, pour chaque clé, une liste de fichiers appartenant à ce groupe. Donc, pour zipper

pseudo:

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
   } 
}

Autres conseils

Vous pouvez sûrement faire cela avec un peu de C # et des bibliothèques comme 7-zip ou SharpZipLib .

Vous pouvez utiliser System.IO.Directory.GetFiles () pour parcourir les fichiers de chaque répertoire, en analysant leur nom et en les ajoutant à un objet 7-zip ou SharpZipLib. S'il s'agit de milliers de fichiers, il peut être préférable de les insérer dans un service ou dans une sorte de tâche planifiée à exécuter du jour au lendemain afin de ne pas taxer le partage de fichiers.

Bonne chance à vous!

MODIFIER: vous pouvez utiliser un objet System.IO.FileInfo pour chaque fichier si vous avez besoin d'analyser la date de création ou tout autre type de fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top