C# - Arquivos Autozip em uma pasta com base no mês do ano
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?
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.