代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

使用.NET删除目录中超过3个月的文件

  •  91
  • JL. Hans Passant  · 技术社区  · 14 年前

    我想知道(使用c)我如何删除某个超过3个月的目录中的文件,但我想日期期限可能是灵活的。

    只是要明确一点:我正在查找超过90天的文件,换句话说,少于90天以前创建的文件应该保留,所有其他文件都应该删除。

    15 回复  |  直到 6 年前
        1
  •  213
  •   Steve Danner    9 年前

    像这样的事情。

    using System.IO; 
    
    string[] files = Directory.GetFiles(dirName);
    
    foreach (string file in files)
    {
       FileInfo fi = new FileInfo(file);
       if (fi.LastAccessTime < DateTime.Now.AddMonths(-3))
          fi.Delete();
    }
    
        2
  •  72
  •   Uri Abramson    11 年前

    这是一个单内衬lambda:

    Directory.GetFiles(dirName)
             .Select(f => new FileInfo(f))
             .Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
             .ToList()
             .ForEach(f => f.Delete());
    
        3
  •  26
  •   Samuel Neff    14 年前

    对于那些喜欢过度使用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());
    
        4
  •  13
  •   Pierre-Luc Champigny    14 年前

    下面是如何获取目录中文件的创建时间并查找3个月前创建的文件(准确地说是90天前)的一小段:

        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();
            }
        }
    
        5
  •  3
  •   Keith Bloom    14 年前

    这个 GetLastAccessTime System.io.File类的属性应该有帮助。

        6
  •  1
  •   Ian Jacobs    14 年前

    基本上,您可以使用directory.get files(path)获取所有文件的列表。之后,您将遍历列表,并按照Keith的建议调用getLastAccessTim()。

        7
  •  0
  •   nWorx    14 年前

    你只是需要 FileInfo ->创建时间

    而不仅仅是计算时差。

    在app.config中,您可以保存 TimeSpan 必须删除文件的时间值

    同时查看 DateTime Subtract 方法。

    祝你好运

        8
  •  0
  •   jinsungy    14 年前

    或者,您可以使用 File.GetCreationTime Method 如果需要根据创建日期删除文件。

        9
  •  0
  •   Yiannis Leoussis    10 年前

    像那样的

                foreach (FileInfo file in new DirectoryInfo("SomeFolder").GetFiles().Where(p => p.CreationTime < DateTime.Now.AddDays(-90)).ToArray())
                    File.Delete(file.FullName);
    
        10
  •  0
  •   vishal    10 年前
                system.IO;
    
                 List<string> DeletePath = new List<string>();
                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)
                    {
                        string delFullPath = file.DirectoryName + "\\" + file.Name;
                        DeletePath.Add(delFullPath);
                    }
                }
                foreach (var f in DeletePath)
                {
                    if (File.Exists(F))
                    {
                        File.Delete(F);
                    }
                }
    

    在页面加载、Web服务或任何其他用途中使用。

    我的概念是每7天我必须删除文件夹文件而不使用数据库

        11
  •  0
  •   Arihant Lodha    9 年前
             //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.
               String DirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6) + "\\Log(s)\\";
    
              //Fetching all the folders.
                String[] objSubDirectory = Directory.GetDirectories(DirPath);
    
                //For each folder fetching all the files and matching with date given 
                foreach (String subdir in objSubDirectory)     
                {
                    //Getting the path of the folder                 
                    String strpath = Path.GetFullPath(subdir);
                    //Fetching all the files from the folder.
                    String[] strFiles = Directory.GetFiles(strpath);
                    foreach (string 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();
                    }
    
                }
    
        12
  •  0
  •   Rosidin Bima    8 年前

    我试过这段代码,它运行得很好,希望能回答这个问题。

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

    私有子删除zip()

        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
    
        14
  •  0
  •   Maximiliano Cesán    7 年前

    例如: 要转到源上的文件夹项目,我需要向上两个文件夹。 我一周工作2天,工作4小时

    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(){
            string[] files = Directory.GetFiles("../../Users/Maxi/Source/Repos/13-12-2017_config_pdfListados/ApplicaAccWeb/Uploads/Reports");
            foreach (string 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();
            }
        }
    
        15
  •  0
  •   n122vu    6 年前

    我在一个作为服务运行的控制台应用程序中使用以下内容,从app.settings文件中获取目录信息。保存文件的天数也是可配置的,乘以-1可用于datetime.now的adddays()方法。

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