以下是我首先要用外行术语做的事情:我想获取文件(也许只有一些文件)。如果有子目录,我也希望在这些子目录中获取文件。我正在使用Visual C ++ / CLI进行编程,因此我使用.net程序集。
在WinSCP中,即使用Session.SynchronizeDirectories()
。最后一个参数是TransferOptions
(一个类),它通常设置为null。基本上这意味着每个文件都将被传输。如果我创建一个对象并设置属性string FileMask
,我应该只能传输某些文件。
所以我将WinSCP C# example program更改为:
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:\temp\win", "/C/Users/peter/Documents/WinSCP5.5.1/",
false, false, SynchronizationCriteria.Time, tro);
// Throw on any error
synchronizationResult.Check();
}
当我运行程序时,当前目录和子目录中的一切都会被传输!
认为我在指定这些选项时可能出错了。我使用WinSCP程序。 (可以参考WinSCP网站Transfer Settings Dialog页面中的图片。)
除了为文件掩码输入以下内容外,所有选项都清晰:
*.txt
我单击“确定”按钮开始传输。我有预览选项。 我看到只选择了txt文件,甚至是子目录中的文件。
所以WinSCP程序有效,但不是API吗?
[编辑]我正在使用WinSCP程序集的5.5.2版。
答案 0 :(得分:0)
最后我在复活节假期前开始工作。在与@Martin合作一段时间后,我解决了这个问题。 (请注意,我并不是说我找到了解决方案。):(
无论如何,我下载了WinSCP 5.5.2版本的源代码。当我使用Visual Studio 2008时,我必须将项目从dot net版本4修改回版本3.5。我将它包含在我的原始项目中。编译它。好。我有原始项目使用该输出DLL。我确保WinSCP EXE也是verison 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的帮助。