我基本上从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如何获取最新文件。我发现使用intellisense有一个RemoteFileInfoCollection
类。
但是这个课程没有很好的记录(或者至少不足以让我使用)
问题:
seesion.GetFiles()
的SFTP站点上的CSV,因为remotePath
参数是字符串而不是列表。我知道我可以遍历路径列表并从FTP下载,这是一种合理的方法吗?我不确定我是否想要多次调用GetFiles()
,因为它似乎特意命名为文件,我知道它确实会一次下载多个文件。 答案 0 :(得分:1)
使用代码obsolete,只需将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();
}
替换为you have found to download the one latest file,然后重复设置即可下载所有选定的文件。
我还使用Take
代替@Html.TextBoxFor(m => m.Date1, "{0:yyyy-MM-dd}", new { type = "date", @class = "form-control", id = "Date1"})
@Html.TextBoxFor(m => m.Date2, "{0:yyyy-MM-dd}", new { type = "date", @class = "form-control", id = "Date2" })
@Html.CheckBoxFor(m => m.ISChecked, new { @class = "icheck", id = "Checkbox1" })
,因为它可以通过filemask自行过滤文件。
Uncaught Exception:
Error: spawn node ENOENT
at exports._errnoException (util.js:1024:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
at onErrorNT (internal/child_process.js:374:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:607:11)
at startup (bootstrap_node.js:167:16)
at bootstrap_node.js:589:3