Gostaria de saber (usando C #) como posso excluir arquivos em um determinado diretório com mais de 3 meses, mas acho que o período de datas pode ser flexível.
Só para deixar claro: procuro arquivos com mais de 90 dias, ou seja, os arquivos criados há menos de 90 dias devem ser mantidos, todos os outros excluídos.
Respostas:
Algo assim não dá certo.
fonte
LastAccessTime
- você deve ir para a propriedadeCreationTime
se quiser!Aqui está um lambda de 1 linha:
fonte
new DirectoryInfo(dir).GetFiles()
é mais rápido do quenew FileInfo(f)
para cada arquivo.Para aqueles que gostam de usar o LINQ em excesso.
fonte
.ToList()
chamada adiciona além de um segundo loop pelos arquivos correspondentes?List<T>
define umForEach
método que pode ser usado para aplicar umAction<T>
a todos os elementos. Infelizmente, não existe tal método de extensão paraIEnumerable<T>
.ForEach
método deIEnumerable<T>
extensão há muito tempo, às vezes esqueço que ele não está integrado.Aqui está um snippet de como obter a hora de criação de arquivos no diretório e encontrar aqueles que foram criados há 3 meses (90 dias atrás, para ser exato):
fonte
ToList()
,DirectoryInfo.GetFiles()
retorna aFileInfo[]
.foreach()
loop para conter o valor(DateTime.Now- new TimeSpan(90, 0, 0, 0))
. Não há razão para calcular isso repetidamente no loop.A propriedade GetLastAccessTime na classe System.IO.File deve ajudar.
fonte
Basicamente, você pode usar Directory.Getfiles (Path) para obter uma lista de todos os arquivos. Depois disso, você percorre a lista e chama GetLastAccessTim () conforme sugerido por Keith.
fonte
Algo parecido
fonte
Tentei este código e funciona muito bem, espero que esta resposta
fonte
A abordagem mais canônica quando se deseja excluir arquivos em um determinado período é usar o LastWriteTime do arquivo (última vez que o arquivo foi modificado):
(O texto acima é baseado na resposta de Uri, mas com
LastWriteTime
.)Sempre que você ouvir pessoas falando sobre excluir arquivos mais antigos que um determinado período de tempo (o que é uma atividade bastante comum), fazê-lo com base no LastModifiedTime do arquivo é quase sempre o que eles estão procurando.
Como alternativa, em circunstâncias muito incomuns, você pode usar o abaixo, mas use-os com cuidado, pois eles vêm com advertências.
A hora em que o arquivo foi criado no local atual. Porém, tome cuidado se o arquivo foi copiado, será a hora em que foi copiado e
CreationTime
será mais recente que o do arquivoLastWriteTime
.Se quiser excluir os arquivos com base na última vez em que foram lidos, você pode usar isso, mas não há garantia de que será atualizado, pois pode ser desativado em NTFS. Verifique
fsutil behavior query DisableLastAccess
se está ligado. Além disso, em NTFS, pode levar até uma hora para que o LastAccessTime do arquivo seja atualizado após ter sido acessado.fonte
você só precisa de FileInfo -> CreationTime
e do que apenas calcular a diferença de tempo.
no app.config você pode salvar o valor de TimeSpan de quantos anos o arquivo deve ter para ser excluído
também verifique o método DateTime Subtract .
boa sorte
fonte
Como alternativa, você pode usar o método File.GetCreationTime se precisar excluir arquivos com base nas datas de criação.
fonte
use no carregamento da página ou serviço da web ou qualquer outro uso.
Meu conceito é evrry 7 dias eu tenho que deletar o arquivo da pasta sem usar DB
fonte
fonte
Por exemplo: Para ir para Meu projeto de pasta na origem, preciso de até duas pastas. Eu faço este algoritmo para 2 dias por semana e em quatro horas
fonte
Eu uso o seguinte em um aplicativo de console, rodando como um serviço, para obter informações de diretório do arquivo App.Settings. O número de dias para manter os arquivos também é configurável, multiplicado por -1 para uso no método AddDays () de DateTime.Now.
fonte
Um tipo de exemplo SSIS .. (se isso ajudar alguém)
fonte
uma vez que as soluções com
new FileInfo(filePath)
não são facilmente testáveis, sugiro usar Wrappers para classes comoDirectory
,File
ePath
assim:Em seguida, use algo assim:
fonte
Basta criar uma pequena função de exclusão que pode ajudá-lo a realizar essa tarefa, eu testei esse código e ele funciona perfeitamente bem.
Esta função exclui arquivos com mais de 90 dias , bem como um arquivo com extensão .zip a ser excluído de uma pasta.
fonte