检测文件变更

Sync Framework 文件同步提供程序自动检测在同步作用域内针对文件和文件夹所做的变更。

显式变更检测与隐式变更检测

必须在启动同步会话之前执行变更检测。默认情况下,在 Sync Framework 首次对提供程序调用 GetChangeBatchProcessChangeBatch 时将自动执行变更检测。

托管代码:如果应用程序在初始化提供程序时指定了 ExplicitDetectChanges 标志,该应用程序必须在启动会话之前显式调用 DetectChanges 方法。

非托管代码:如果应用程序在初始化提供程序时指定了 FILESYNC_INIT_FLAG_DISABLE_IMPLICIT_DETECT_CHANGES 标志,该应用程序必须在启动会话之前显式调用 IFileSyncProvider::DetectChanges 方法。

内置变更检测算法

Sync Framework 具有内置算法,用于检测针对同步作用域中的文件和文件夹所做的变更。

以下任意属性发生变更后都将报告变更:

  • 最后一次修改文件的时间。

  • 如果启用哈希运算,则是为该文件计算的哈希值。

  • 文件大小。

  • 文件或文件夹名称。此检查区分大小写。

  • 由提供程序处理的任意文件属性。

如果发现文件与此前了解的文件具有相同的创建时间、大小和哈希值(如果使用了哈希运算),但是文件的名称或路径不同,则报告文件移动或重命名。如果发现多个文件符合这些条件,Sync Framework 将认为原始文件已删除并且创建了新文件。

Sync Framework 将文件夹移动或重命名视作已删除旧文件夹并且创建了新文件夹。报告该文件夹中的文件已移动。因此在这种情况下,通常无需重新发送文件数据。

计算变更检测的哈希值

如果应用程序在初始化提供程序时指定了 CompareFileStreams 标志(对于托管代码)或 FILESYNC_INIT_FLAG_USE_HASHING 标志(对于非托管代码),该提供程序将使用文件流的所有内容计算每个文件的哈希值。然后,该提供程序会比较这些哈希值;这样做可以更准确地执行变更检测,但性能会稍有降低。

请参阅

参考

IFileSyncProvider 接口
FILESYNC_INIT_FLAGS 枚举
FileSyncProvider
FileSyncOptions

概念

同步文件