如何使用 WinSCP 通过 SFTP 下载 10 个 CSV 类型的最新文件?

How to download 10 newest files of type CSV via SFTP using WinSCP?

我基本上是从 C# 开始使用 WinSCP。例如,我知道我可以使用以下代码从 FTP 站点下载多个 CSV 文件:

var remotePath = "some\path*.csv";
var localPath = "some\path";
TransferOperationResult transferResult =
    session.GetFiles(remotePath, localPath, false, transferOptions);

但这会从 SFTP 站点下载所有 CSV。我只想要最新的10个。我从这个link:https://winscp.net/eng/docs/script_download_most_recent_file看到如何获取最新的文件。而且我发现使用智能感知有一个 RemoteFileInfoCollection class.

但是这个 class 没有很好的记录(或者至少不足以让我使用)

问题:

  1. 我该如何使用这个 class?
  2. 如何使用 seesion.GetFiles() 在 SFTP 站点上请求 'some' CSV,因为 remotePath 参数是字符串而不是列表。我知道我可以遍历路径列表并从 FTP 下载这些路径,这是一种合理的方法吗?考虑到它似乎专门被命名为文件,我不确定我是否想多次调用 GetFiles(),而且我知道它确实会一次下载多个文件。

使用代码 you have found to download the one latest file and just replace FirstOrDefault with Take 并迭代该集以下载所有选定的文件。

我也使用 EnumerateRemoteFiles 而不是 ListDirectory,因为它可以通过文件掩码自行过滤文件。

const string remotePath = "/remote/path";
const string localPath = "C:\local\path";

IEnumerable<RemoteFileInfo> files =
    session.EnumerateRemoteFiles(remotePath, "*.csv", EnumerationOptions.None)
    .Where(file => !file.IsDirectory)
    .OrderByDescending(file => file.LastWriteTime)
    .Take(10);

string destPath = Path.Combine(localPath, "*");
foreach (RemoteFileInfo file in files)
{
    Console.WriteLine("Downloading {0}...", file.Name);
    session.GetFiles(RemotePath.EscapeFileMask(file.FullName), destPath).Check();
}