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

WinSCP Session.EnumerateRemoteFiles带时间约束掩码失效求助

解决SFTP筛选24小时内新文件的问题

你的问题核心在于大部分SFTP客户端库的EnumerateRemoteFiles方法不支持带时间条件的扩展掩码语法(比如*.xml>24HS),这类语法通常是特定工具(如WinSCP图形界面)的自定义扩展,并非标准SFTP协议或通用库的支持特性,所以直接用这个掩码会返回空列表。

可行的解决方案

先枚举所有符合*.xml的文件,再在客户端本地筛选出24小时内的文件,之后逐个验证下载:

  1. 枚举所有XML文件:用*.xml掩码获取完整的文件列表,这一步你已经能正常执行。
  2. 筛选时间范围内的文件:遍历列表,对比文件的最后修改时间与当前时间的差值,保留24小时以内的文件。
  3. 逐个验证并下载:对筛选后的文件执行你的验证逻辑,通过后再下载。

代码示例(以WinSCP .NET库为例)

// 枚举远程路径下所有XML文件
var allXmlFiles = session.EnumerateRemoteFiles("/your/remote/dir", "*.xml", EnumerationOptions.None);

// 计算24小时前的时间节点(统一用UTC避免时区偏差)
var cutoffUtc = DateTime.UtcNow.AddHours(-24);

// 筛选最近24小时修改的文件(转UTC时间对比)
var recentFiles = allXmlFiles.Where(file => file.LastWriteTimeUtc >= cutoffUtc);

// 遍历处理每个文件
foreach (var file in recentFiles)
{
    // 执行你的自定义验证逻辑,比如检查文件大小、读取内容校验等
    bool isFileValid = YourValidationLogic(session, file);

    if (isFileValid)
    {
        // 验证通过,下载文件
        session.GetFiles(file.FullName, @"C:\your\local\dir\*").Check();
    }
}

关键注意事项

  • 时区统一:务必将本地时间和服务器文件时间统一为UTC(或同一时区),否则会因时区差导致筛选结果错误。
  • 性能考量:9000+文件的遍历筛选在客户端执行完全可行,若担心耗时,可考虑分批枚举,但通常无需额外优化。
  • 时间属性选择:根据需求选择LastWriteTimeUtc(最后修改时间)或CreationTimeUtc(创建时间),部分SFTP服务器可能不返回创建时间,优先用修改时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:37:09