WinSCP .NET程序集:目录同步中的FileMask不起作用

时间:2014-04-15 08:23:44

标签: c# winscp winscp-net

以下是我首先要用外行术语做的事情:我想获取文件(也许只有一些文件)。如果有子目录,我也希望在这些子目录中获取文件。我正在使用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版。

1 个答案:

答案 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的帮助。