1

这是我想首先用外行术语做的事情:我想获取文件(也许只是一些文件)。如果有子目录,我也想在这些子目录中获取文件。我正在使用 Visual C++/CLI 进行编程,所以我使用的是 .net 程序集。

在 WinSCP 中,即使用Session.SynchronizeDirectories(). 最后一个参数是TransferOptions(一个类),它通常设置为空。基本上这意味着每个文件都将被传输。如果我创建一个对象并设置属性string FileMask,我应该只能传输某些文件。

所以我将WinSCP C#示例程序更改为:

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 网站传输设置对话框页面中的图片。)

除了我为文件掩码输入以下内容外,所有选项都很清楚: *.txt

我单击确定按钮开始传输。我有预览选项。而且我只看到选择的 txt 文件,甚至是子目录中的一个

所以 WinSCP 程序有效,但 API 无效?

[编辑] 我正在使用 5.5.2 版的 WinSCP 程序集。

4

1 回答 1

0

最后我在复活节假期前让它工作了。在与@Martin 合作了一段时间后,我解决了这个问题。(请注意,我并不是说我已经找到了解决方案。):(

无论如何,我下载了 WinSCP 5.5.2 版本的源代码。当我使用 Visual Studio 2008 时,我必须将项目从 dot net 版本 4 修改回版本 3.5。我将其包含在我的原始项目中。编译它。好的。我有使用该输出 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 程序集并使用它。

感谢马丁的帮助。

于 2014-04-17T09:00:17.063 回答