2015-10-13 87 views
0

我试图从一个目录中下载文件,而不需要目录中的其他目录。WinSCP .NET程序集 - GetFiles根目录非递归(无子目录)

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

使用最新版本(5.7.5)

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

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

在'SearchOption's https://msdn.microsoft.com/en-us/library/ms143448(v=vs.110看看).aspx – Sybren

+0

如何将这与winscp一起使用? – user5441417

回答

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是目标目录。所以你必须告诉WinSCP通过附加一个反斜杠将文件下载到目录:C:\bla\。否则,WinSCP将尝试将所有文​​件保存到C:\,其名称为bla。失败,如果已经有一个名称的目录。或者相互覆盖文件,如果没有的话。

    文档为localPath parameter of the GetFiles

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

  3. 你应该检查是否有错误,或者通过检查返回TransferOperationResult或通过直接调用.Check()

所以正确的代码是:

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

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

谢谢!它工作得很好:) – user5441417