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



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

最新更新