文件同步入门

Sync Framework 包括一个文件同步提供程序,该提供程序扩展了 UnmanagedSyncProviderWrapper 对象(对于托管代码)或 IKnowledgeSyncProvider 接口(对于非托管代码),旨在简化在多个文件系统之间同步文件和文件夹的应用程序的创建。

创建和初始化提供程序

托管代码:应用程序创建 FileSyncProvider 对象。在构造函数中指定路径和配置选项。

非托管代码:应用程序通过向 CoCreateInstance 传递 CLSID_FileSyncProviderIID_IFileSyncProvider,创建一个 IFileSyncProvider 对象。通过调用 Initialize 方法,指定路径和配置选项。

在构造或初始化提供程序时指定的路径定义要同步的根文件夹,以及要存储同步元数据的文件夹和文件名。或者,应用程序也可以指定一个存储临时文件的文件夹,以及一个存储因冲突而更新的文件的文件夹。初始化提供程序之前,这些文件夹必须存在且具有有效路径。

备注

对于文件同步提供程序中的所有方法,路径不能超过 MAX_PATH

构造或初始化提供程序时可以指定一组配置标志。这些标志通过多种方式修改提供程序的行为,例如,通过为每个文件计算哈希值改善变更检测,或者将已删除的文件移至回收站而不是永久删除它们。对于托管代码,这些标志通过 FileSyncOptions 表示;对于非托管代码,这些标志通过 FILESYNC_INIT_FLAGS 表示。

创建并初始化源提供程序和目标提供程序之后,可以将它们传递给同步会话并开始同步。

文件属性

Sync Framework 仅识别以下文件和文件夹属性:

  • FILE_ATTRIBUTE_DIRECTORY

  • FILE_ATTRIBUTE_READONLY

  • FILE_ATTRIBUTE_HIDDEN

  • FILE_ATTRIBUTE_SYSTEM

  • FILE_ATTRIBUTE_TEMPORARY

将忽略并且不传播其他文件属性。

安全性和加密

提供程序不对同步中涉及的文件夹执行任何身份验证。应用程序必须在将所用的文件夹传递给提供程序之前对这些文件夹执行身份验证。

不传播安全信息,如任意访问控制列表 (DACL)。需要由应用程序或用户来正确保障目标文件夹的安全性,以帮助防止未经授权的访问。

已加密文件夹中的文件在发送之前将被解密,并且不会在目标文件夹中加密。请注意,这意味着即便源文件夹加密,其中的文件在发送时将仍处于未加密状态。为了帮助防止未经授权的访问或篡改,提供程序与文件夹之间的通信信道必须是受信任的。

同步元数据和临时文件存储在初始化提供程序时指定的文件夹中。因为这些文件可能包含用户数据,所以必须适当地确保这些文件夹的安全性,并且清除临时文件以避免意外泄露信息。

保证一致性

Sync Framework 保证当文件同步提供程序应用变更时,如果无法应用文件流中的所有内容,则不应用任何内容。要提供上述保证,需要以独占模式打开文件。这意味着在关闭文件句柄之前,其他任何应用程序都不能打开或删除该文件。有关更多信息,请参见 Microsoft Win32 文档中的 CreateFile 函数。

如果不能以独占模式打开文件,该文件将被跳过。将在元数据中记录跳过操作,以便在将来会话中正确处理该操作。

元数据存储

文件同步提供程序使用元数据存储服务在自定义数据存储区中存储所有同步元数据。元数据存储区是一个文件。此文件可与要同步的文件或文件夹存储在一起,或存储在初始化提供程序时指定的其他位置。有关元数据存储服务组件的更多信息,请参见 Sync Framework Metadata Storage Service

备份和还原文件系统副本

当从备份中还原文件系统副本时,可能发生同步问题。例如,还原之后所做的本地变更可能不会传播到其他副本。之所以发生这种情况,是因为用于将版本分配给源副本上变更的滴答计数可能导致其他副本将变更检测为已过时。

若要确保不会发生这种情况,当从备份中还原文件系统副本时,请放弃同步元数据,并将此副本视为新副本,同时为其分配一个新的副本 ID。然后,文件同步提供程序可以为此副本创建同步元数据,并将其与社区中的其他副本正确同步。

请参阅

参考

IFileSyncProvider 接口
FILESYNC_INIT_FLAGS 枚举
FileSyncProvider
FileSyncOptions

概念

同步文件