Domanda

L'IT ha avuto il compito di ridurre il tasso di utilizzo del file server, quindi mi piacerebbe fare la mia parte comprimendo i vecchi file (cioè Excel / Access / Txt).

Abbiamo alcune cartelle che contengono migliaia di file, quindi non voglio comprimere l'intera directory in un unico file di grandi dimensioni - sarebbe preferibile avere un numero di file più piccoli in modo che sia più facile per un utente trova il "secchio" di dati che sta cercando.

Esiste un modo per usare C # per leggere una directory e comprimere i file in gruppi di anno-mese (tutti i file di anno-mese messi insieme in uno zip)?

O sarebbe meglio usare uno script come AutoIT?

O esistono già dei programmi per farlo, quindi non devo scrivere nulla?

È stato utile?

Soluzione

Non sono sicuro che la tua domanda riguardi zippare, selezionare file da un determinato anno / mese o entrambi.

A proposito di zippare Peter ha già menzionato 7-zip e SharpZipLib. Personalmente ho solo esperienza con quest'ultimo, ma è tutto positivo, facile da lavorare.

Informazioni sul raggruppamento dei file potrebbe essere eseguito ripetendo tutti i file nella cartella e raggruppandoli per data di creazione o ultima data di modifica.

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

ora dovresti avere un dizionario contenente chiavi distinte per anno / mese e ogni chiave per un elenco di file appartenenti a quel gruppo. Quindi per zippare

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

Altri suggerimenti

Sicuramente puoi farlo con un po 'di C # e librerie come 7-zip o SharpZipLib .

È possibile utilizzare System.IO.Directory.GetFiles () per scorrere i file in ciascuna directory, analizzando il nome del file e aggiungendoli a un oggetto a 7 zip o SharpZipLib. Se si tratta di migliaia di file, potrebbe essere meglio lanciarlo in un servizio o in qualche tipo di attività pianificata da eseguire durante la notte per non tassare la condivisione dei file.

Buona fortuna a te!

MODIFICA: Come addendum potresti utilizzare un oggetto System.IO.FileInfo per ciascun file se devi analizzare per data di creazione o altri attacchi di file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top