检测文件变更

Sync Services for File Systems 自动检测在同步作用域内针对文件和文件夹所做的变更。

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

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

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

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

内置变更检测算法

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

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

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

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

  • 文件大小。

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

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

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

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

计算变更检测的哈希值

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

请参阅

参考

IFileSyncProvider 接口
FILESYNC_INIT_FLAGS 枚举
FileSyncProvider
FileSyncOptions

其他资源

Sync Services for File Systems