我是Sync Framework的新手,我想我在这里缺少了一些重要和基本的东西。
我在网络上有一个源文件夹和目标文件夹。我试图只用一种方式同步这两个文件夹,source→目的地
一切都很好,只是当我删除源文件夹中的一些文件时,在下一次同步时,我希望这些文件在目标中被删除,但这并没有发生。
我的代码片段:
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();
}
每次调用都使用Guid.NewGuid()
-此GUID存储在同步框架用来存储其关于源文件和目标文件的知识的元数据中。如果每次都提供一个新的GUID,那么它就不能使用以前收集的元数据。
将Guid.NewGuid()
替换为两个固定的GUID(一个用于源,一个用于目标),它将开始正常工作。
根据MSDN的这篇文章,也没有必要排除*.metadata
,因为这是框架中内置的排除之一。