Supprimer des fichiers de plus de 3 mois dans un répertoire à l’aide de .NET

Je voudrais savoir (en utilisant C #) comment je peux supprimer des fichiers dans un répertoire donné datant de plus de 3 mois, mais je suppose que la période peut être flexible.

Pour être clair, je recherche des fichiers datant de plus de 90 jours, en d’autres termes, les fichiers créés il y a moins de 90 jours doivent être conservés, tous les autres étant supprimés.

Quelque chose comme ça va le faire.

using System.IO; ssortingng[] files = Directory.GetFiles(dirName); foreach (ssortingng file in files) { FileInfo fi = new FileInfo(file); if (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) fi.Delete(); } 

Voici un lambda 1-liner:

 Directory.GetFiles(dirName) .Select(f => new FileInfo(f)) .Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3)) .ToList() .ForEach(f => f.Delete()); 

Pour ceux qui aiment trop utiliser LINQ.

 (from f in new DirectoryInfo("C:/Temp").GetFiles() where f.CreationTime < DateTime.Now.Subtract(TimeSpan.FromDays(90)) select f ).ToList() .ForEach(f => f.Delete()); 

Voici un extrait de la façon d’obtenir le temps 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):

  DirectoryInfo source = new DirectoryInfo(sourceDirectoryPath); // Get info of each file into the directory foreach (FileInfo fi in source.GetFiles()) { var creationTime = fi.CreationTime; if(creationTime < (DateTime.Now- new TimeSpan(90, 0, 0, 0))) { fi.Delete(); } } 

La propriété GetLastAccessTime sur la classe System.IO.File devrait vous aider.

Fondamentalement, 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 suggéré par Keith.

vous avez juste besoin de FileInfo -> CreationTime

et que simplement calculer la différence de temps.

dans l’app.config, vous pouvez enregistrer la valeur TimeSpan de quel âge le fichier doit être pour être supprimé

consultez également la méthode DateTime Subtract .

bonne chance

Vous pouvez également utiliser la méthode File.GetCreationTime si vous devez supprimer des fichiers en fonction des dates de création.

Quelque chose comme ca

  foreach (FileInfo file in new DirectoryInfo("SomeFolder").GetFiles().Where(p => p.CreationTime < DateTime.Now.AddDays(-90)).ToArray()) File.Delete(file.FullName); 
  system.IO; List DeletePath = new List(); DirectoryInfo info = new DirectoryInfo(Server.MapPath("~\\TempVideos")); FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray(); foreach (FileInfo file in files) { DateTime CreationTime = file.CreationTime; double days = (DateTime.Now - CreationTime).TotalDays; if (days > 7) { ssortingng delFullPath = file.DirectoryName + "\\" + file.Name; DeletePath.Add(delFullPath); } } foreach (var f in DeletePath) { if (File.Exists(F)) { File.Delete(F); } } 

utiliser dans le chargement de page ou Webservice ou toute autre utilisation.

Mon concept est evrry 7 jours je dois supprimer le fichier de dossier sans utiliser DB

  //Store the number of days after which you want to delete the logs. int Days = 30; // Storing the path of the directory where the logs are stored. Ssortingng DirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Subssortingng(6) + "\\Log(s)\\"; //Fetching all the folders. Ssortingng[] objSubDirectory = Directory.GetDirectories(DirPath); //For each folder fetching all the files and matching with date given foreach (Ssortingng subdir in objSubDirectory) { //Getting the path of the folder Ssortingng strpath = Path.GetFullPath(subdir); //Fetching all the files from the folder. Ssortingng[] strFiles = Directory.GetFiles(strpath); foreach (ssortingng files in strFiles) { //For each file checking the creation date with the current date. FileInfo objFile = new FileInfo(files); if (objFile.CreationTime < = DateTime.Now.AddDays(-Days)) { //Delete the file. objFile.Delete(); } } //If folder contains no file then delete the folder also. if (Directory.GetFiles(strpath).Length == 0) { DirectoryInfo objSubDir = new DirectoryInfo(subdir); //Delete the folder. objSubDir.Delete(); } } 

J’ai essayé ce code et cela fonctionne très bien, j’espère que cela a répondu

 namespace EraseJunkFiles { class Program { static void Main(ssortingng[] args) { DirectoryInfo yourRootDir = new DirectoryInfo(@"C:\yourdirectory\"); foreach (FileInfo file in yourRootDir.GetFiles()) if (file.LastWriteTime < DateTime.Now.AddDays(-90)) file.Delete(); } } } 

Private Sub DeleteZip ()

  Dim eachFileInMydirectory As New DirectoryInfo("D:\Test\") Dim fileName As IO.FileInfo Try For Each fileName In eachFileInMydirectory.GetFiles If fileName.Extension.Equals("*.zip") AndAlso (Now - fileName.CreationTime).Days > 90 Then fileName.Delete() End If Next Catch ex As Exception WriteToLogFile("No Files older than 90 days exists be deleted " & ex.Message) End Try End Sub 

Par exemple: Pour aller sur le dossier Mon dossier, il faut que je place deux dossiers. Je fais cet algorim à 2 jours par semaine et à 4 heures

 public static void LimpiarArchivosViejos() { DayOfWeek today = DateTime.Today.DayOfWeek; int hora = DateTime.Now.Hour; if(today == DayOfWeek.Monday || today == DayOfWeek.Tuesday && hora < 12 && hora > 8) { CleanPdfOlds(); CleanExcelsOlds(); } } private static void CleanPdfOlds(){ ssortingng[] files = Directory.GetFiles("../../Users/Maxi/Source/Repos/13-12-2017_config_pdfListados/ApplicaAccWeb/Uploads/Reports"); foreach (ssortingng file in files) { FileInfo fi = new FileInfo(file); if (fi.CreationTime < DateTime.Now.AddDays(-7)) fi.Delete(); } } private static void CleanExcelsOlds() { string[] files2 = Directory.GetFiles("../../Users/Maxi/Source/Repos/13-12-2017_config_pdfListados/ApplicaAccWeb/Uploads/Excels"); foreach (string file in files2) { FileInfo fi = new FileInfo(file); if (fi.CreationTime < DateTime.Now.AddDays(-7)) fi.Delete(); } } 

J’utilise les éléments suivants dans une application de 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 être utilisé dans la méthode AddDays () de DateTime.Now.

 static void CleanBackupFiles() { ssortingng gstrUncFolder = ConfigurationManager.AppSettings["DropFolderUNC"] + ""; int iDelAge = Convert.ToInt32(ConfigurationManager.AppSettings["NumDaysToKeepFiles"]) * -1; ssortingng backupdir = ssortingng.Concat(@"\", "Backup", @"\"); ssortingng[] files = Directory.GetFiles(ssortingng.Concat(gstrUncFolder, backupdir)); foreach (ssortingng file in files) { FileInfo fi = new FileInfo(file); if (fi.CreationTime < DateTime.Now.AddDays(iDelAge)) { fi.Delete(); } } }