WinSCP .NET程序集 - GetFiles根目录非递归(没有子目录)

时间:2015-10-13 15:01:32

标签: c# winscp winscp-net non-recursive

我正在尝试从目录下载文件,而不需要希望目录中的其他目录。

我在互联网上搜索了一个答案,我发现的唯一一件事就是在FileMask中使用"|*/" TransferOptions,这是无效的,并且没有下载任何内容。

使用最新版本(5.7.5)

TransferOptions t = new TransferOptions { FileMask = "|*/" };

session.GetFiles("/", @"C:\bla", false, t);

1 个答案:

答案 0 :(得分:1)

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

另请参阅WinSCP常见问题How do I transfer directory non-recursively?

TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "|*/";

session.PutFiles(@"d:\toupload\*", "/home/user/", false, transferOptions);

它等同于您的代码。

您的代码中还有其他问题。

  1. 您要求WinSCP下载根目录,但要排除所有目录。所以什么都没下载。您需要要求下载根目录中的所有文件:/*

    引用remotePath parameter of the GetFiles的文档:

      

    远程目录的完整路径,然后是斜杠和wildcard ,以选择要下载的文件或子目录。要下载目录中的所有文件,请使用掩码*

  2. 我假设C:\bla是目标目录。因此,您必须通过附加反斜杠C:\bla\告诉WinSCP将文件下载到目录中。否则,WinSCP将尝试将所有文​​件保存到C:\,名称为bla。失败,如果已经有一个具有该名称的目录。或者如果没有,则将这些文件一个一个地覆盖。

    localPath parameter of the GetFiles的文档:

      

    将文件下载到的完整路径。下载多个文件时,路径中的文件名应替换为operation mask或省略(路径以反斜杠结尾)。

  3. 您应该检查错误,方法是检查返回的TransferOperationResult或直接致电.Check()

  4. 所以正确的代码是:

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