我在SFTP服务器上有一个文件夹,里面有一堆文件.有6个不同的文件,每60分钟创建一次.每个都有一个日期和时间戳,为期3天.

FilesCodes_Critical.2022-03-17_11-16-22-614.json
FilesCodes_Critical.2022-03-17_12-12-16-818.json
FilesCodes_Critical.2022-03-17_13-11-43-025.json
TransactionAudit.2022-03-14_11-16-23-530.json
TransactionAudit.2022-03-14_12-12-19-764.json
TransactionAudit.2022-03-14_13-11-45-454.json

我正在创建几个每小时运行一次的进程,并将拾取一个特定的文件并对其进行处理.我知道我可以用Name.StartsWith来抓取正确的文件,但我不知道如何抓取最新的文件.我想LastWriteTime可以用,但我不知道如何比较.

fileNamePat = "FileCodes_Critical";    

try {       
    sftpc.Connect();

    var files = sftpc.ListDirectory(sFTPPath);
    foreach (SftpFile file in files)
    {
        if (file.Name.StartsWith(fileNamePat))
        {
            string jsonData = sftpc.ReadAllText(file.FullName);
            DataSet ds = JsonConvert.DeserializeObject<DataSet>(jsonData);
        }
    }
} catch (Exception ex) {
    Console.WriteLine(ex.Message);
}

我想try 这样的方法来比较并将最终文件放入targetFile

if (file.Name.StartsWith(fileNamePat))
{
    if (file.LastWriteTime > targetFile.LastWriteTime)
    {
        targetFile = file;
    }
}

但我不知道在哪里/如何创建SftpFile targetFile,这样比较就可以了.我try 了SftpFile targetFile = new();,我想我可以判断它是否为空,然后设置它,但这不起作用.

推荐答案

try 在文件集上使用lambda:

foreach (SftpFile file in files.Where(f => f.Name.Contains(fileNamePat))
                                 .OrderByDescending(o => o.LastWriteTime)
                                   .Take(1)) 
{ 
      [...]
}

事实上,你不需要每个人都有一个.你可以从lambda获得你的"目标":

SftpFile targetFile = files.Where(f => f.Name.Contains(fileNamePat))
               .OrderByDescending(o => o.LastWriteTime)
                   .FirstOrDefault();

.net相关问答推荐

.NET restore/build在使用组织包的Github Action工作流中调用时获得401

将多行参数传递给Power Shell中的DotNet Pack命令

Azure管道-使用.NET 8 RC2 SDK生成C#项目失败

部署时如何控制红隼端口?

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

是否可以将 SandCastle 创建的两个页面合并到一个主页中?

Owin Twitter登录-根据验证程序远程证书无效

为什么 .NET 内部 Hashtable 中有一个 Thread.Sleep(1)?

为什么 .NET 中没有可序列化 XML 的字典?

如何等到远程 .NET 调试器附加

软件包版本始终为 1.0.0,带有 dotnet pack

返回 IList 是否比返回 T[] 或 List 更糟糕?

是否有可用的 WPF 备忘单?

何时使用抽象类?

如何在 Action 中传递参数?

将月份 int 转换为月份名称

获取系统中已安装的应用程序

安装带有恢复操作的 Windows 服务以重新启动

我可以为 Dictionary 条目使用集合初始化程序吗?

MultipleActiveResultSets=True 还是多个连接?