Je voudrais savoir (en utilisant C #) comment je peux supprimer des fichiers dans un certain répertoire datant de plus de 3 mois, mais je suppose que la période de date pourrait être flexible.
Juste pour être clair: je recherche des fichiers datant de plus de 90 jours, c'est-à-dire que les fichiers créés il y a moins de 90 jours doivent être conservés, tous les autres supprimés.
Réponses:
Quelque chose comme ça ne le fait pas.
la source
LastAccessTime
- vous devriez opter pour la propriétéCreationTime
si vous le souhaitez!Voici un lambda 1-liner:
la source
new DirectoryInfo(dir).GetFiles()
est plus rapide quenew FileInfo(f)
pour chaque fichier.Pour ceux qui aiment surutiliser LINQ.
la source
.ToList()
appel ajoute à part une deuxième boucle dans les fichiers correspondants?List<T>
définit uneForEach
méthode qui peut être utilisée pour appliquer unAction<T>
à tous les éléments. Malheureusement, il n'existe pas de méthode d'extension pour les fichiersIEnumerable<T>
.ForEach
méthode d'extensionIEnumerable<T>
il y a si longtemps, j'oublie parfois qu'elle n'est pas intégrée.Voici un extrait de la façon d'obtenir l'heure de création des fichiers dans le répertoire et de trouver ceux qui ont été créés il y a 3 mois (il y a 90 jours pour être exact):
la source
ToList()
,DirectoryInfo.GetFiles()
retourne aFileInfo[]
.foreach()
boucle pour contenir la valeur de(DateTime.Now- new TimeSpan(90, 0, 0, 0))
. Il n'y a aucune raison de calculer cela à plusieurs reprises dans la boucle.La propriété GetLastAccessTime sur la classe System.IO.File devrait aider.
la source
En gros, vous pouvez utiliser Directory.Getfiles (Path) pour obtenir une liste de tous les fichiers. Après cela, vous parcourez la liste et appelez GetLastAccessTim () comme Keith l'a suggéré.
la source
Quelque chose comme ca
la source
J'ai essayé ce code et cela fonctionne très bien, j'espère que cela répondra
la source
L'approche la plus canonique lorsque vous souhaitez supprimer des fichiers sur une certaine durée consiste à utiliser LastWriteTime du fichier (dernière fois que le fichier a été modifié):
(Ce qui précède est basé sur la réponse d'Uri mais avec
LastWriteTime
.)Chaque fois que vous entendez des gens parler de la suppression de fichiers plus anciens qu'une certaine période (ce qui est une activité assez courante), le faire en fonction de LastModifiedTime du fichier est presque toujours ce qu'ils recherchent.
Sinon, dans des circonstances très inhabituelles, vous pouvez utiliser les éléments ci-dessous, mais utilisez-les avec prudence car ils comportent des mises en garde.
L'heure à laquelle le fichier a été créé à l'emplacement actuel. Cependant, faites attention si le fichier a été copié, ce sera l'heure à laquelle il a été copié et
CreationTime
sera plus récent que celui du fichierLastWriteTime
.Si vous souhaitez supprimer les fichiers en fonction de la dernière fois qu'ils ont été lus, vous pouvez l'utiliser, mais il n'y a aucune garantie qu'il sera mis à jour car il peut être désactivé dans NTFS. Vérifiez
fsutil behavior query DisableLastAccess
s'il est activé. Sous NTFS également, la mise à jour de LastAccessTime du fichier peut prendre jusqu'à une heure après son accès.la source
vous avez juste besoin de FileInfo -> CreationTime
et que de simplement calculer le décalage horaire.
dans l'app.config, vous pouvez enregistrer la valeur TimeSpan de l'âge du fichier à supprimer
consultez également la méthode DateTime Subtract .
bonne chance
la source
Vous pouvez également utiliser la méthode File.GetCreationTime si vous devez supprimer des fichiers en fonction des dates de création.
la source
utilisation dans le chargement de page ou le service Web ou toute autre utilisation.
Mon concept est tous les 7 jours que je dois supprimer le fichier de dossier sans utiliser DB
la source
la source
Par exemple: pour accéder à mon projet de dossier sur la source, j'ai besoin de deux dossiers. Je fais cet algorim en 2 jours par semaine et en 4 heures
la source
J'utilise ce qui suit dans une application console, exécutée en tant que service, pour obtenir des informations de répertoire à partir du fichier App.Settings. Le nombre de jours pour conserver les fichiers est également configurable, multiplié par -1 pour une utilisation dans la méthode AddDays () de DateTime.Now.
la source
Un exemple de type SSIS ... (si cela aide quelqu'un)
la source
comme les solutions avec
new FileInfo(filePath)
ne sont pas facilement testables, je suggère d'utiliser des Wrappers pour des classes commeDirectory
,File
etPath
comme ceci:Ensuite, utilisez quelque chose comme ceci:
la source
Créez simplement une petite fonction de suppression qui peut vous aider à réaliser cette tâche, j'ai testé ce code et il fonctionne parfaitement bien.
Cette fonction supprime les fichiers datant de plus de 90 jours ainsi qu'un fichier avec l'extension .zip à supprimer d'un dossier.
la source