gpt4 book ai didi

c# - WinSCP .NET SynchronizeDirectories 在从远程文件夹中删除本地文件后不会删除它们

转载 作者:行者123 更新时间:2023-11-30 21:50:20 31 4
gpt4 key购买 nike

我正在尝试使用 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) 的相关部分是:

  • “对于部分路径掩码,使用反斜杠 () 还是正斜杠 (/) 都没有区别;掩码将始终适用于本地和远程路径”

  • “您还可以指定本地和远程特定文件或目录的完整路径”

  • “完整路径掩码仅匹配本地或远程路径,具体取决于使用的语法”

在这种情况下,似乎使用完整路径掩码导致掩码仅应用于远程路径。对于支持新文件、重命名和删除的同步,路径掩码应该通过使用相对路径在远程和本地匹配,例如

var fileMask = "*/Folder_*/*.png";

或者除了远程匹配之外,还包括一个匹配本地的掩码:

var fileMask = @"C:\ProjectFolder\AppData\Folder_*\*.png; /FTP_root/Folder_*/*.png;

我只是简单地测试了后一种方法,但它似乎也有效(尽管需要考虑掩码中的大小和时间限制)。相对路径方法适用于我的情况,尽管它并不完全等同于完整路径方法(因为它也可能匹配目录层次结构中较低的文件夹)。

关于c# - WinSCP .NET SynchronizeDirectories 在从远程文件夹中删除本地文件后不会删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405414/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com