Olá pessoal, hoje eu gostaria de falar sobre apagar os arquivos utilizando a linguagem C#.NET das últimas 48 horas. Estes dias escrevi um artigo que falava sobre o envio de arquivo criptografado, mas depois que o mesmo 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 na rotina que apaga o arquivo com qualquer extensão que desejar e após 48 horas, a pasta precisa ser passada ou indicada.

Usado:
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 é extender 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 às 48 horas. Se você precisar diminuir o tempo, basta colocar 24 ou 12 horas sem qualquer problema. (Code 1)

DateTime dataBase = DateTime.Now.AddHours(-48);

Code 1.
    Depois de escrever o código armazenando a data em uma variável, busco todos os arquivos com extensão  .ZIP. (Code 2)

string[] _files = Directory.GetFiles(ENDRECO FISICO ou DE REDE, "*.ZIP", SearchOption.AllDirectories);

Code 2
    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 que encontrou, verificando o horário se é menor que 48 horas a conta da data atual. Se for, o mesmo é apagado. (Code 3)

                foreach (string _file in _files)
                {
                    FileInfo fs = new FileInfo(_file);

 
                        File.Delete(_file);
                }

Code 3

    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 às 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: (Code 4).

 if (fs.CreationTime < dataBase)

Code 4

    Para toda esta funcionalidade, é bom fazer um método responsável para fazer a busca, verificação e deleção. Segue no Code 5

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


Code 5
    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: (Code 6)


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



 Code 6
    Criei outro método colocando a data menos às 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.