Pergunta

Ele foi encarregado de reduzir a taxa de uso do servidor de arquivos, então eu gostaria de fazer minha parte meus arquivos antigos de compactação (ou seja, excel/access/txt).

Temos algumas pastas que contêm milhares de arquivos, por isso não quero apenas fechar todo o diretório em um arquivo grande - seria preferível ter vários arquivos menores, para que fosse mais fácil para um usuário encontrar os dados 'Bucket' que eles estão procurando.

Existe uma maneira de usar o C# para ler um diretório e abaixar os arquivos em grupos durante o ano (todos os arquivos de um ano unido em um zip)?

Ou seria melhor usar um script como o Autoit?

Ou já existem programas para fazer isso para que eu não precise codificar nada?

Foi útil?

Solução

Não tenho certeza se a sua pergunta é sobre zipando, selecionando arquivos de um ano/mês ou ambos.

Sobre Zipping Peter já mencionou 7-Zip e Sharpziplib. Eu pessoalmente só experimento com o último, mas é tudo positivo, fácil de trabalhar.

Sobre o agrupamento de seus arquivos, isso pode ser feito iterando todos os arquivos na pasta e agrupando -os até a data criada ou a última data modificada.

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

Agora você deve ter um dicionário contendo chaves distintas de ano/mês e chaves para a chave de uma lista de arquivos pertencentes a esse grupo. Então, para zipando

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

Outras dicas

Certamente você pode fazer isso com um pouco de C# e bibliotecas como 7-ZIP ou Sharpziplib.

Você pode usar o System.io.directory.getFiles () para percorrer os arquivos em cada diretório, analisando o nome do arquivo e adicionando-os a um objeto 7-ZIP ou Sharpziplib. Se houver milhares de arquivos, talvez seja melhor jogá -lo em um serviço ou algum tipo de tarefa programada para executar durante a noite para não tributar o compartilhamento de arquivos.

Boa sorte para você !

EDITAR: Como um adendo, você pode usar um objeto System.io.fileInfo para cada arquivo, se precisar analisar por data criada ou outro arquivo de arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top