【问题标题】:Sync files changing the files at sync同步文件在同步时更改文件
【发布时间】:2012-05-28 18:41:51
【问题描述】:

我想知道在以下场景中是否可以使用微软同步框架。

我有一个包含高分辨率图像的本地文件夹(带有子文件夹)和另一个包含低分辨率图像的文件夹。我想同步两个文件夹。关键是low文件夹中的结构和文件必须与high文件夹中的相同,但图像必须是低分辨率的。显然图像不一样,所以我猜同步框架无法处理。

如果框架允许在同步时同步修改它们的文件,那将是完美的。这会很棒,但我想这超出了框架可以处理的范围,我在考虑某种半自动同步。我的意思是,让框架检测变化,读取这些变化并根据这些变化执行我自己的创建/删除文件操作。

这可能吗?有没有其他方法可以做到这一点?

谢谢

【问题讨论】:

    标签: visual-studio-2010 synchronization microsoft-sync-framework


    【解决方案1】:

    Sync Framework 中的文件同步提供程序具有预览模式,可让您检测更改而无需进行实际同步...然后您可以循环通过更改并进行其他处理...

    【讨论】:

    • 那太好了。但是想象一下。我在预览模式下查询高分辨率文件夹中的更改。然后,我根据提供的信息 (1,2,3) 应用我自己的更改。一切正常。然后,我在高分辨率文件夹中进行了一些其他更改(4,5),然后再次查询更改。框架是报告新的变化(4,5)还是报告所有的变化(1,2,3,4,5)?我想,除非我与框架同步,否则我会再次报告所有更改。我对吗?如果是,我该如何处理?
    • 订阅 ApplyingChange 事件,然后设置 SkipChange 属性以跳过将更改应用到目标
    • 我试过了,没用。如果将 ApplyingChange 事件上的 SkipChange 值设置为 true,则不会应用更改,但下次同步时,更改将标记为仍待处理。我认为如果您跳过更改,文件夹元数据不会更新。你知道我是否可以强制更新元数据?
    【解决方案2】:

    我在类似问题上得到的最接近的结果如下:

    • 将文件夹设置为“假同步”;并在该文件夹中执行完全同步(不在预览模式下,实际同步)。

    • 将 SyncOrchestrator LocalProvider 设置为假文件夹的提供者,并将提供者设置为 ExplicitDetectChanges。

    • 故意不要为您的假提供者调用 DetectChanges()(我们真的不想知道假文件夹中发生了什么)。

    • 执行同步 (SyncDirectionOrder.Download),并在 OnApplyingChange 中捕获更改文件的名称。这会将所有文件发送到伪造文件夹并更新元数据

    • 删除 fake 文件夹中除元数据文件外的所有文件。

    下次同步时,fake 文件夹中的元数据文件应保留更改,因此仅显示更改的文件。我知道我的情况与你的情况有些不同,但希望无论如何它会有所帮助。

    【讨论】:

    • 好方法!!不幸的是,我已经改变了面对问题的方式。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2014-09-23
    • 2021-11-29
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多