我使用Microsoft Sync Framework和C#开发以下函数,用于在两个目录之间同步文件:
private void InitialSync()
{
var sourceId = new SyncId(Guid.NewGuid());
var destId = new SyncId(Guid.NewGuid());
var sourceReplica = new FileSyncProvider(sourceId.GetGuidId(), _firstPath);
var destReplica = new FileSyncProvider(destId.GetGuidId(), _secondPath);
var agent = new SyncOrchestrator
{
LocalProvider = sourceReplica,
RemoteProvider = destReplica,
Direction = SyncDirectionOrder.UploadAndDownload
};
agent.Synchronize();
}
这段代码很好用。问题是,它不仅会同步已更改的文件,还会同步添加到任一目录的文件和从任一目录中删除的文件。有没有办法让agent.Synchronize();
只同步已更改的文件同时添加或删除不同步文件?
答案 0 :(得分:3)
您需要加入ApplyingChange事件。
在应用更改之前将其称为,这样您就有机会覆盖默认行为。
要跳过更改,请将SkipChange属性设置为true。跳过的更改将不会应用于目标副本。对于每次跳过的更改,将SkippedChangeEventArgs.SkipReason设置为ApplicationRequest来触发SkippedChange事件。
因此,如果ApplyingChangeEventArgs.ChangeType
为Create
或Delete
,请将ApplyingChangeEventArgs.SkipChange
设置为true
。然后,只有那些重命名或更新的文件才会同步。