Как загрузить 10 новейших файлов типа CSV через SFTP с помощью WinSCP? - PullRequest
0 голосов
/ 21 мая 2018

Я использую WinSCP в основном из C #.Например, я знаю, что могу загрузить несколько файлов CSV с FTP-сайта, используя этот код:

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

Но при этом все CSV-файлы загружаются с сайта SFTP.Я хочу только последние 10. Я вижу по этой ссылке: https://winscp.net/eng/docs/script_download_most_recent_file, как получить последний файл.И я обнаружил, используя intellisense, что существует класс RemoteFileInfoCollection.

Но этот класс не очень хорошо документирован (или, по крайней мере, недостаточно хорош для использования)

Вопросы:

  1. Как я могу использовать этот класс?
  2. Как я могу запросить 'некоторые' из CSV на SFTP-сайте, используя seesion.GetFiles(), так как параметр remotePath является строкойа не список.Я знаю, что могу просмотреть список путей и загрузить их с FTP, это разумный подход?Я не уверен, что хотел бы вызывать GetFiles() несколько раз, учитывая, что он, кажется, определенно назван как файл (ы), и я знаю, что он загружает несколько файлов одновременно.

1 Ответ

0 голосов
/ 21 мая 2018

Используйте найденный вами код , чтобы загрузить последний файл , и просто замените 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...