我是Sync Framework的新手,我认为我在这里遗漏了一些重要而又简陋的东西。
我在网络上有一个源文件夹和目标文件夹。我正在尝试仅以一种方式同步这两个文件夹,源→目标。
一切都运行良好,但是当我删除源文件夹中的某些文件时,在下一次同步时我希望在目标中删除这些文件,但这不会发生。
我的代码段:
private void SyncronizeFolders(string source, string destination)
{
FileSyncOptions options = FileSyncOptions.ExplicitDetectChanges |
FileSyncOptions.RecycleDeletedFiles | FileSyncOptions.RecyclePreviousFileOnUpdates |
FileSyncOptions.RecycleConflictLoserFiles;
FileSyncScopeFilter filter = new FileSyncScopeFilter();
filter.FileNameExcludes.Add("*.metadata");
// Create file system provider
FileSyncProvider sourceprovider = new FileSyncProvider(Guid.NewGuid(), _sourcefolder, filter, options);
FileSyncProvider destinationprovider = new FileSyncProvider(Guid.NewGuid(), _destinationfolder, filter, options);
sourceprovider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.SourceWins;
destinationprovider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.SourceWins;
// Ask providers to detect changes
sourceprovider.DetectChanges();
destinationprovider.DetectChanges();
// Synchronization of 2 Folders
SyncOrchestrator agent = new SyncOrchestrator();
agent.LocalProvider = sourceprovider;
agent.RemoteProvider = destinationprovider;
agent.Direction = SyncDirectionOrder.Upload;
agent.Synchronize();
}
答案 0 :(得分:2)
您正在为每个调用使用Guid.NewGuid()
- 此GUID存储在同步框架用于存储其有关源文件和目标文件的知识的元数据中。如果每次都提供新的GUID,则它不能使用以前收集的元数据。
将Guid.NewGuid()
替换为两个固定的GUID(一个用于源,一个用于目标),它将开始正常工作。
根据this MSDN article,排除*.metadata
也是不必要的,因为这是框架所具有的内置排除项之一。