我尝试使用WinSCP .NET库执行从远程位置到本地路径的文件同步,以便将源文件夹中新增或更新的文件下载到目标文件和文件目的地中已删除目的地中已从目标文件夹中删除的内容。
同步调用的评估方式如下:
var fileMask = "/FTP_root/Folder_*/*.png>2016-01-01 00:00:00";
var results = session.SynchronizeDirectories(SynchronizationMode.Local,
@"C:\ProjectFolder\AppData",
FTPDirectory,
true,
false,
SynchronizationCriteria.Time,
new TransferOptions() { FileMask = fileMask });
总结一下,SynchronizeDirectories的参数是:
SynchronizationMode
LocalPath
RemotePath
RemoveFiles
Mirror
SynchronizationCriteria
TransferOptions
我在这段代码中发现,新的和重命名的文件是按预期下载的,但是从远程文件夹中删除的文件不会被删除,如果是重命名的文件,则旧的和同步后,新文件名位于本地文件夹中。
答案 0 :(得分:3)
同步将文件掩码应用于远程路径和本地路径,以便在两个方向上识别哪些文件适用于同步。
文件掩码文档(https://winscp.net/eng/docs/file_mask)的相关部分是:
"对于部分路径掩码,无论使用back()还是正斜杠(/)都没有区别;掩码将始终适用于本地和远程路径"
"您还可以指定特定文件或目录的完整路径,包括本地和远程"
"完整路径掩码仅匹配本地路径或远程路径,具体取决于使用的语法"
在这种情况下,似乎使用全路径掩码会导致掩码仅应用于远程路径。对于支持新文件,重命名和删除的同步,路径掩码应该通过使用相对路径远程和本地匹配,例如。
var fileMask = "*/Folder_*/*.png";
或者除了远程包含一个本地匹配的掩码:
var fileMask = @"C:\ProjectFolder\AppData\Folder_*\*.png; /FTP_root/Folder_*/*.png;
我只是简单地测试了后一种方法,但它似乎也有效(尽管掩模中的尺寸和时间限制需要考虑一些因素)。相对路径方法适用于我的情况,虽然它并不完全等同于完整路径方法(因为它也可能匹配目录层次结构中较低的文件夹)。