【发布时间】: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