WinSCP . net程序集- GetFiles根目录非递归(无子目录)

本文关键字:递归 子目录 根目录 net 程序集 GetFiles WinSCP | 更新日期: 2023-09-27 18:17:33

我正在尝试从一个目录下载文件,没有其他目录在想要的目录。

我在互联网上搜索了一个答案,我发现的唯一的事情是使用FileMask "|*/"TransferOptions,这是不工作,下载什么。

使用最新版本(5.7.5)

TransferOptions t = new TransferOptions { FileMask = "|*/" };
session.GetFiles("/", @"C:'bla", false, t);

WinSCP . net程序集- GetFiles根目录非递归(无子目录)

您排除子目录的代码是正确的。

请参见WinSCP FAQ如何非递归传输目录?

TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "|*/";
session.PutFiles(@"d:'toupload'*", "/home/user/", false, transferOptions);

它相当于你的代码。


你的代码中有其他问题。

  1. 让WinSCP下载根目录,但排除所有目录。所以没有下载任何东西。需要请求下载根目录下的所有文件:/* .

    引用GetFilesremotePath参数文档:

    远程目录的全路径,后跟斜杠和通配符,以选择要下载的文件或子目录。要下载目录中的所有文件,请使用掩码*

  2. 我假设C:'bla是一个目标目录。所以你必须告诉WinSCP下载文件到这个目录,并加上一个反斜杠:C:'bla'。否则,WinSCP将尝试将所有文件保存到名称为blaC:'。如果已经有同名的目录,则失败。或者用另一个文件覆盖一个文件,如果没有的话。

    GetFileslocalPath参数文档:

    下载文件的完整路径。当下载多个文件时,路径中的文件名应替换为操作掩码或省略(路径以反斜杠结尾)。

  3. 您应该通过检查返回的TransferOperationResult或直接调用.Check()来检查错误。

所以正确的代码是:
TransferOptions t = new TransferOptions { FileMask = "|*/" };
session.GetFiles("/*", @"C:'bla'", false, t).Check();