Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft文件同步框架的正确选项_C#_.net_Microsoft Sync Framework - Fatal编程技术网

C# Microsoft文件同步框架的正确选项

C# Microsoft文件同步框架的正确选项,c#,.net,microsoft-sync-framework,C#,.net,Microsoft Sync Framework,我需要做基本的单向文件同步从本地到远程服务器。我试着使用微软的同步框架,它工作得很好。但是,我需要两个现在无法获得的功能: 如果目标上的文件已被删除,则下一次同步应从源中重新创建该文件 如果目标上的文件已更改,则下一次同步应替换源上的文件 是否可以通过使用SyncOrchestrator.Synchronize()函数中的某些选项来实现 现有代码基于MSDN文章: public static void SyncFileSystemReplicaOneWay(string sourcePath,

我需要做基本的单向文件同步从本地到远程服务器。我试着使用微软的同步框架,它工作得很好。但是,我需要两个现在无法获得的功能:

  • 如果目标上的文件已被删除,则下一次同步应从源中重新创建该文件
  • 如果目标上的文件已更改,则下一次同步应替换源上的文件
  • 是否可以通过使用SyncOrchestrator.Synchronize()函数中的某些选项来实现

    现有代码基于MSDN文章:

    public static void SyncFileSystemReplicaOneWay(string sourcePath, string destinationPath)
    {
            FileSyncProvider sourceProvider = null;
            FileSyncProvider destinationProvider = null;
    
            try
            {
                    sourceProvider = new FileSyncProvider(sourcePath);
                    destinationProvider = new FileSyncProvider(destinationPath);
    
                    var agent = new SyncOrchestrator();
                    agent.LocalProvider = sourceProvider;
                    agent.RemoteProvider = destinationProvider;
                    agent.Direction = SyncDirectionOrder.Upload;
    
                    var stats = agent.Synchronize();
            }
    
            finally
            {
                    if (sourceProvider != null) sourceProvider.Dispose();
                    if (destinationProvider != null) destinationProvider.Dispose();
            }
    }
    

    如果没有额外的代码,这两种方案都无法开箱即用

    同步完成后,它会检测源中的更改并将其应用于目标

    如果是您的情况,则更改是在目标上进行的,而源无法告知您删除了目标上的文件以将其包含在更改枚举中。如果修改了源上的文件,您的运气会更好,因为这会导致冲突,并使您有机会使用源上的文件覆盖目标上的删除

    第二个问题也是这样


    另一种方法是运行destination changes on destination,找出删除/更新了哪些文件,并从源文件中获取这些文件。

    如果我可以将destination folder设置为普通用户只读,这当然可以解决这两种情况。但我不能,因为目标站点的其他用户将使用相同的文件夹。