Pregunta

A IT se le ha asignado la tarea de reducir la tasa de uso del servidor de archivos, por lo que me gustaría hacer mi parte comprimiendo los archivos antiguos (es decir, Excel / Access / Txt).

Tenemos algunas carpetas que contienen miles de archivos, así que no quiero simplemente comprimir todo el directorio en un archivo grande. Sería preferible tener una cantidad de archivos más pequeños para que sea más fácil para un usuario. encuentre el 'cubo' de datos que están buscando.

¿Hay alguna forma de utilizar C # para leer un directorio y comprimir los archivos en grupos de mes-año (todos los archivos de año-mes se encuentran juntos en un archivo zip)?

¿O sería mejor usar un script como AutoIT?

¿O ya existen programas para hacer esto, así que no tengo que codificar nada?

¿Fue útil?

Solución

No estoy seguro de si su pregunta es acerca de comprimir, seleccionar archivos de un año / mes en particular o de ambos.

Acerca de comprimir. Peter ya mencionó 7-zip y SharpZipLib. Personalmente, solo tengo experiencia con este último, pero es todo positivo, fácil de trabajar.

Acerca de agrupar tus archivos, se puede hacer iterando todos los archivos en la carpeta y agrupándolos por fecha de creación o fecha de última modificación.

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

ahora debe tener un diccionario que contenga claves de año / mes distintas y para cada clave una lista de archivos que pertenecen a ese grupo. Así que para comprimir

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

Otros consejos

Seguramente puedes hacer esto con un poco de C # y bibliotecas como 7-zip o SharpZipLib .

Puede usar System.IO.Directory.GetFiles () para recorrer los archivos en cada directorio, analizar por nombre de archivo y agregarlos a un objeto 7-zip o SharpZipLib. Si se trata de miles de archivos, sería mejor lanzarlo en un servicio o algún tipo de tarea programada para que se ejecute durante la noche a fin de no gravar el recurso compartido de archivos.

¡Buena suerte!

EDITAR: Como apéndice, puede usar un objeto System.IO.FileInfo para cada archivo si necesita analizar por fecha de creación u otros atributos de archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top