IFileSyncProviderCallback::OnApplyingChange
当尝试应用文件变更时发生。
HRESULT OnApplyingChange(
LPCWSTR pcszNewDirectoryPath,
LPCWSTR pcszCurrentDirectoryPath,
const WIN32_FIND_DATAW *pNewFileInfo,
const WIN32_FIND_DATAW *pCurrentFileInfo,
DWORD dwChangeType,
BOOL *pfSkipChange);
参数
- pcszNewDirectoryPath
[in, string] 要变更的文件的新路径。该路径是相对于根目录的。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_DELETE,则此值为 NULL。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_RENAME,则此值为应用新名称之后的新路径。
- pcszCurrentDirectoryPath
[in, string] 要变更的文件的当前路径。该路径是相对于根目录的。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_CREATE,则此值为 NULL。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_RENAME,则此值为应用新名称之前的当前路径。
- pNewFileInfo
[in, unique] 要变更的文件的新文件数据。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_DELETE,则此值为 NULL。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_RENAME,则此文件数据表示应用新名称之后的文件。
- pCurrentFileInfo
[in, unique] 要变更的文件的当前文件数据。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_DELETE,则此值为 NULL。如果 dwChangeType 为 FILESYNC_CHANGE_TYPE_RENAME,则此文件数据表示应用新名称之前的当前文件。
- dwChangeType
[in] 要应用的变更的类型。此值来自 FILESYNC_CHANGE_TYPE 枚举。
- pfSkipChange
[out] 指示是否应跳过此变更。
返回值
S_OK
应用程序特定的错误代码
备注
此事件可为应用程序提供一种机制,使其可在同步会话期间动态跳过变更。若要跳过变更,请将 pfSkipChange 的值设置为 TRUE。跳过的变更将不应用于目标副本。将对要跳过的每个变更激发 IFileSyncProviderCallback::OnChangeSkipped 事件,并将 dwReason 设置为 FILESYNC_SKIP_REASON_APPLICATION_REQUEST。
在会话过程中,会多次尝试某些变更。每次尝试时,都会激发此事件。例如,尝试删除文件夹。由于文件夹中存在一个文件,因此尝试失败。在整个会话期间,将不断尝试执行此文件夹删除操作,直到删除操作成功或者确定在此会话期间不能执行该删除操作并跳过为止。
此事件仅在变更影响目标副本的文件数据时引发,而不会在变更仅影响文件的元数据时引发。例如,如果检测到更新-更新冲突且目标系统上的文件被选为入选方,则不会对目标应用任何变更,并且不激发此事件。同样,将逻辑删除从源传播到目标会导致仅更新元数据,而不会对目标文件系统进行任何变更。在这种情况下,将不激发此事件。
如果 OnApplyingChange 返回一个错误,则 Sync Framework 会停止处理当前的变更批,并从 IFileSyncProvider 的 ProcessChangeBatch 方法返回错误代码。