c# - 如何使用 WinSCP 通过 SFTP 下载 10 个最新的 CSV 类型文件?
问题描述
我基本上从 C# 使用 WinSCP。例如,我知道我可以使用以下代码从 FTP 站点下载多个 CSV 文件:
var remotePath = "some\path*.csv";
var localPath = "some\path";
TransferOperationResult transferResult =
session.GetFiles(remotePath, localPath, false, transferOptions);
但这会从 SFTP 站点下载所有 CSV。我只想要最新的 10 个。我从这个链接中看到:https ://winscp.net/eng/docs/script_download_most_recent_file如何获取最新文件。我发现使用智能感知有一个RemoteFileInfoCollection
类。
但是这个类没有很好的记录(或者至少不够好让我使用)
问题:
- 我怎样才能使用这个类?
- 我如何使用 请求 SFTP 站点上的“一些”CSV
seesion.GetFiles()
,因为remotePath
参数是字符串而不是列表。我知道我可以遍历路径列表并从 FTP 下载这些路径,这是一种合理的方法吗?考虑到它似乎专门被命名为文件,我不确定我是否要GetFiles()
多次调用,而且我知道它确实会一次下载多个文件。
解决方案
使用您找到的代码下载一个最新文件,然后替换FirstOrDefault
并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();
}
推荐阅读
- vue.js - 升级vue后出现白屏死机,[HMR] Waiting for update signal from WDS
- azure - 使用 pyspark 从 Jupyter notebook 连接 SQL DW
- c++ - 如何在 C++ 中迭代非常量变量?
- c# - 我正在尝试在 pdf 中插入指向另一个网站的超链接
- javascript - 在html页面中读取Json“元素”
- r - 函数不使用 read.csv2 读取 CSV 文件
- arrays - 如何使用 Nativescript 索引数组内的数组
- python-3.x - 如何使用 .bat 文件自动将黄瓜 .feature 文件转换为 .py 文件
- android - Firebase 控制台 sdk 设置显示为未完成
- reactjs - 纱线构建和纱线安装有什么区别?