我正在尝试从目录下载文件,而不需要希望目录中的其他目录。
我在互联网上搜索了一个答案,我发现的唯一一件事就是在FileMask
中使用"|*/"
TransferOptions
,这是无效的,并且没有下载任何内容。
使用最新版本(5.7.5)
TransferOptions t = new TransferOptions { FileMask = "|*/" };
session.GetFiles("/", @"C:\bla", false, t);
答案 0 :(得分:1)
您排除子目录的代码是正确的。
另请参阅WinSCP常见问题How do I transfer directory non-recursively?
TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "|*/";
session.PutFiles(@"d:\toupload\*", "/home/user/", false, transferOptions);
它等同于您的代码。
您的代码中还有其他问题。
您要求WinSCP下载根目录,但要排除所有目录。所以什么都没下载。您需要要求下载根目录中的所有文件:/*
。
引用remotePath
parameter of the GetFiles
的文档:
远程目录的完整路径,然后是斜杠和wildcard ,以选择要下载的文件或子目录。要下载目录中的所有文件,请使用掩码
*
。
我假设C:\bla
是目标目录。因此,您必须通过附加反斜杠C:\bla\
告诉WinSCP将文件下载到目录中。否则,WinSCP将尝试将所有文件保存到C:\
,名称为bla
。失败,如果已经有一个具有该名称的目录。或者如果没有,则将这些文件一个一个地覆盖。
localPath
parameter of the GetFiles
的文档:
将文件下载到的完整路径。下载多个文件时,路径中的文件名应替换为operation mask或省略(路径以反斜杠结尾)。
您应该检查错误,方法是检查返回的TransferOperationResult
或直接致电.Check()
。
所以正确的代码是:
TransferOptions t = new TransferOptions { FileMask = "|*/" };
session.GetFiles("/*", @"C:\bla\", false, t).Check();