You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FluentFTP在C#中高效获取并删除指定日期前的文件?

使用FluentFTP高效查找并删除早于X天的旧文件

你当前用GetListing遍历文件再判断日期的方法可行,但可以从这几个方向优化:

  • 缩小初始文件列表范围
    用ListOptions.FileList参数只获取文件(排除目录),不用手动判断文件类型,减少后续过滤的工作量:

    var allFiles = ftp.GetListing("/目标目录", ListOptions.FileList);
    
  • 借助FTP服务器原生命令过滤(更高效)
    不用拉取全量文件列表,直接让FTP服务器返回符合时间条件的文件,减少网络传输。不同服务器命令不同:

    • Unix类FTP服务器(比如vsftpd):用find命令直接筛选30天前的文件
      var commandResult = ftp.Execute("find /目标目录 -type f -mtime +30 -print");
      // 解析commandResult.ResponseLines获取文件路径,再批量删除
      
    • Windows IIS FTP服务器:用DIR命令输出文件列表后解析日期
      var dirResult = ftp.Execute("DIR /A-D"); // /A-D表示只显示文件
      // 遍历dirResult.ResponseLines,提取每个文件的修改日期和路径,筛选出符合条件的
      
  • 批量删除减少交互次数
    不管用哪种方式筛选出目标文件,都收集路径后用DeleteFiles批量删除,比逐个调用DeleteFile效率高很多:

    var cutoffDate = DateTime.Now.AddDays(-30);
    var filesToDelete = allFiles
        .Where(file => file.Modified < cutoffDate)
        .Select(file => file.FullName)
        .ToList();
    
    if (filesToDelete.Any())
    {
        ftp.DeleteFiles(filesToDelete);
    }
    
  • 注意时区匹配
    FTP服务器的系统时间可能和本地时区不一致,比如服务器用UTC时间,本地是北京时间,记得把截止日期转成服务器时区的时间再判断:

    var cutoffUtc = DateTime.UtcNow.AddDays(-30);
    var filesToDelete = allFiles
        .Where(file => file.Modified.ToUniversalTime() < cutoffUtc)
        .Select(file => file.FullName)
        .ToList();
    

内容的提问来源于stack exchange,提问作者Venkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:21:08