以下是我想首先用外行的话做的事情:我想获得文件(也许只是一些文件)。如果有子目录,我也想在这些子目录中获取文件。我使用Visual C++/CLI进行编程,所以我使用.net程序集。
在WinSCP中,即使用Session.SynchronizeDirectories()
。最后一个参数是TransferOptions
(一个类),它通常设置为null。基本上,这意味着每个文件都将被传输。如果我创建一个对象并设置属性string FileMask
,我应该只能传输某些文件。
因此,我将WinSCPC#示例程序更改为:
using (Session session = new Session())
{
// Will continuously report progress of synchronization
session.FileTransferred += FileTransferred;
// Connect
session.Open(sessionOptions);
// Create a TransferOptions object
TransferOptions tro = new TransferOptions();
tro.FileMask = "*.txt";
tro.TransferMode = TransferMode.Automatic;
// Synchronize files
SynchronizationResult synchronizationResult;
synchronizationResult =
session.SynchronizeDirectories(
SynchronizationMode.Local, @"C:tempwin", "/C/Users/peter/Documents/WinSCP5.5.1/",
false, false, SynchronizationCriteria.Time, tro);
// Throw on any error
synchronizationResult.Check();
}
当我运行程序时,当前目录和子目录中的所有都会被传输!
我想我在指定这些选项时可能错了。我使用WinSCP程序。(可以参考WinSCP网站传输设置对话框页面中的图片。)
所有选项都是清除的,除了我为"文件"掩码输入以下内容:*.txt
我单击"确定"按钮开始传输。我打开了预览选项。我只看到选中的txt文件,甚至是子目录中的文件。
所以WinSCP程序有效,但API无效?
[编辑]我使用的是WinSCP程序集的5.5.2版本。
终于在复活节假期前开始工作了。在与@Martin合作了一段时间后,我解决了这个问题。(注意,我并不是说我已经找到了解决方案。):(
无论如何,我下载了WinSCP 5.5.2版本的源代码。我必须将项目从dotnet版本4修改回版本3.5,因为我正在使用VisualStudio2008。我把它包含在我最初的项目中。编译它。好的。我有原始项目来使用那个输出DLL。我确保WinSCP EXE也是5.5.2版本。运行它。没问题。文件掩码正在工作。
如果你感兴趣的话,这只是一个次要的故事。使用源代码项目后,我将其删除。我使用从网站下载的5.5.2 DLL。突然间,程序需要30秒左右才能执行第一条语句。然后我使用5.5.1版本的EXE和DLL。同样的延迟。切换到5.5.3 EXE和DLL。同样的30秒左右的延迟。删除DLL并使用5.5.3.net程序集源代码。编译它。程序立即运行。
我想从现在开始我会编译我的.net程序集并使用它。
感谢Martin的帮助。