WinSCP .NET SynchronizeDirectories 在从远程文件夹中删除本地文件后不会删除它们
WinSCP .NET SynchronizeDirectories is not deleting local files after they've been removed from the remote folder
我正在尝试使用 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
我在这段代码中发现的是,新文件和重命名的文件会按预期下载,但是从远程文件夹中删除的文件不会被删除,对于重命名的文件,旧文件和重命名文件都不会被删除。同步后新文件名在本地文件夹中
同步将文件掩码应用于远程和本地路径,以便在两个方向上识别哪些文件适用于同步。
File Mask 文档 (https://winscp.net/eng/docs/file_mask) 的相关部分是:
"For a partial path mask it makes no difference whether you use back () or forward slashes (/); the mask will always work for both local and remote paths"
"You can also specify full path to a specific file or directory, both local and remote"
"The full path mask matches a local or a remote paths only, depending on syntax used"
在这种情况下,似乎使用完整路径掩码导致掩码仅应用于远程路径。对于支持新文件、重命名和删除的同步,路径掩码应该通过使用相对路径在远程和本地匹配,例如
var fileMask = "*/Folder_*/*.png";
或者除了远程匹配之外,还包括一个匹配本地的掩码:
var fileMask = @"C:\ProjectFolder\AppData\Folder_*\*.png; /FTP_root/Folder_*/*.png;
我只是简单地测试了后一种方法,但它似乎也有效(尽管需要考虑掩码中的大小和时间限制)。相对路径方法适用于我的情况,尽管它并不完全等同于完整路径方法(因为它也可能匹配目录层次结构中较低的文件夹)。
我正在尝试使用 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
我在这段代码中发现的是,新文件和重命名的文件会按预期下载,但是从远程文件夹中删除的文件不会被删除,对于重命名的文件,旧文件和重命名文件都不会被删除。同步后新文件名在本地文件夹中
同步将文件掩码应用于远程和本地路径,以便在两个方向上识别哪些文件适用于同步。
File Mask 文档 (https://winscp.net/eng/docs/file_mask) 的相关部分是:
"For a partial path mask it makes no difference whether you use back () or forward slashes (/); the mask will always work for both local and remote paths"
"You can also specify full path to a specific file or directory, both local and remote"
"The full path mask matches a local or a remote paths only, depending on syntax used"
在这种情况下,似乎使用完整路径掩码导致掩码仅应用于远程路径。对于支持新文件、重命名和删除的同步,路径掩码应该通过使用相对路径在远程和本地匹配,例如
var fileMask = "*/Folder_*/*.png";
或者除了远程匹配之外,还包括一个匹配本地的掩码:
var fileMask = @"C:\ProjectFolder\AppData\Folder_*\*.png; /FTP_root/Folder_*/*.png;
我只是简单地测试了后一种方法,但它似乎也有效(尽管需要考虑掩码中的大小和时间限制)。相对路径方法适用于我的情况,尽管它并不完全等同于完整路径方法(因为它也可能匹配目录层次结构中较低的文件夹)。