Olá, pessoal!
Vamos aproveitar o espaço deste artigo para falar um pouco sobre apagar os arquivos
utilizando a linguagem C#.NET das últimas 48 horas. Em um outro artigo, eu já falei sobre o envio de arquivo criptografado – você pode conferir mais dos artigos na minha página do autor aqui no iMasters.
O porém é que, depois
que ele chega ao seu local desejado, é descriptografado e
descompactado. Assim, pode ser apagado depois de 48 horas. Pra isso, foi
feito uma rotina no aplicativo para apagar os mesmos depois de 48 horas.
O que vou mostrar neste artigo é a rotina que apaga o arquivo – com qualquer
extensão que desejar e após 48 horas. Lembre-se de que a pasta precisa ser passada ou
indicada.
Itens utilizados:
- Ferramenta: Visual Studio .NET 2010
- Linguagem C#.NET
- Plataforma Testada: Windows Forms / Windows Services
No meu caso, existem vários arquivos com extensão .ZIP dentro de uma
pasta no servidor. Para não ficar acumulando o espaço no servidor ou
mantendo um histórico desnecessário, a rotina apaga todos.
O
primeiro passo é estender o System.IO no início da classe. Depois, saber
exatamente onde se encontra a pasta ou o caminho das pastas. No momento
da procura de arquivos, o aplicativo vai buscar todas as pastas e
subpastas – isto é, se houver pasta sobe pasta, o mesmo busca e encontra.
Para pegar as últimas 48 horas, eu pego a data de hoje e diminuo 48 horas. Se você precisar diminuir o tempo, basta colocar 24 ou 12
horas sem qualquer problema.
DateTime dataBase = DateTime.Now.AddHours(-48);
Depois de escrever o código armazenando a data em uma variável, busco todos os arquivos com extensão .ZIP.
string[] _files = Directory.GetFiles(ENDRECO FISICO ou DE REDE, "*.ZIP", SearchOption.AllDirectories);
Lembro que, se o endereço for de rede, o seu aplicativo deve ter acesso
de leitura e escrita dentro da pasta ou diretório indicado. Como falei
anteriormente, você pode procurar por arquivos de outra extensão, isto
é, basta trocar o .ZIP para .TXT, .DOC, .XLS e outros.
No final
da linha de busca, coloquei para pegar todos os diretórios com este
comando, SearchOption.AllDirectories, assim o mesmo pega pasta sobe
pasta.
Depois de procurar todos os arquivos de forma
automática, vou fazer um foreach para verificar em cada arquivo encontrado, verificando o horário para saber se é menor que 48 horas a conta da data
atual. Se for, o mesmo é apagado.
foreach (string _file in _files) { FileInfo fs = new FileInfo(_file); File.Delete(_file); }
Note que
dentro do foreach existe um if que verifica a hora do arquivo criado
naquele diretório usando o comando CreationTime. Lembra da variável
armazenada anteriormente com a hora menos 48 horas? Pois é, agora a
mesma está sendo usada para a verificação.
A parte responsável para a verificação de horário é esta:
if (fs.CreationTime < dataBase)
Para toda esta funcionalidade, é bom fazer um método responsável para fazer a busca, verificação e deleção. Segue o código:
private void ApagarArquivoZIP() { DateTime dataBase = DateTime.Now.AddHours(-48); try { string[] _files = Directory.GetFiles(configuracaoSistema.EnderecoCompartilhado, "*.ZIP", SearchOption.AllDirectories); foreach (string _file in _files) { FileInfo fs = new FileInfo(_file); if (fs.CreationTime < dataBase) File.Delete(_file); } }
finally{ } }
Dei o
nome de ApagarArquivoZIP e não passa qualquer parâmetro de entrada. Se o
arquivo for menor do que a hora, então o mesmo é deletado pela linha
File.Delete(_file) dentro do Code 5.
Se quiser fazer a mesma coisa para outros arquivos e outro período de tempo, basta fazer o seguinte:
private void ApagarArquivoTXT() { DateTime dataBase = DateTime.Now.AddHours(-24); try { string[] _files = Directory.GetFiles(configuracaoSistema.EnderecoCompartilhado, "*.TXT", SearchOption.AllDirectories); foreach (string _file in _files) { FileInfo fs = new FileInfo(_file); if (fs.CreationTime < dataBase) File.Delete(_file); } } finally{ } }
Criei
outro método colocando a data menos 24 horas e na extensão do arquivo
para busca foi colocado .TXT.
Bem simples e fácil, não acha?
Espero que tenha gostado e qualquer dúvida pode entrar em contato ou deixem suas impressões, dúvidas ou perguntas nos comentários abaixo.