【问题标题】:WinSCP .NET assembly: FileMask in Directory Synchronization not workingWinSCP .NET 程序集:目录同步中的 FileMask 不起作用
【发布时间】:2014-04-15 08:23:44
【问题描述】:

首先,我想用外行的话来说:我想获取文件(也许只是一些文件)。如果有子目录,我也想在这些子目录中获取文件。我正在使用 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 无效?

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

【问题讨论】:

  • 请出示您的代码
  • 您的代码看起来不错。请设置Session.SessionLogPath并分享日志。例如使用 pastebin.com。
  • 这是日志,位于pastebin.com/xR27KwBH
  • 日志与您的代码不匹配。日志使用二进制传输模式,而您的代码设置为自动。日志显示孤立文件被删除,而您在代码中将false 传递给delete 参数。也有不同的路径。如果您不共享匹配的日志和代码,则很难为您提供帮助。
  • 我查看了日志,似乎程序集正在调用脚本作为回报。反正从日志看,好像根本没有过滤!为了回答您的问题,出于安全问题,我在发布之前修改了路径。我会修改原来的帖子。

标签: c# winscp winscp-net


【解决方案1】:

我终于在复活节假期之前让它工作了。在与@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-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多