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 に設定します。スキップされた変更は、同期先レプリカには適用されません。dwReason が FILESYNC_SKIP_REASON_APPLICATION_REQUEST に設定されている場合は、変更がスキップされるたびに IFileSyncProviderCallback::OnChangeSkipped イベントが発生します。
セッションの間、一部の変更は複数回試行されます。試行のたびに、このイベントが発生します。たとえば、フォルダーの削除が試行されたとします。フォルダーに既存のファイルがあるため、試行は失敗します。削除の処理が成功するまで、またはこのセッション中には削除処理が不可能であると判断されてスキップされるまで、セッション中、このフォルダーの削除処理の試行は継続されます。
変更が同期先レプリカのファイル データに影響を与える場合にのみ、このイベントが生成されます。変更がファイルのメタデータのみに影響を与える場合、このイベントは発生しません。たとえば、更新と更新の競合が検出され、同期先システムのファイルが優先される場合、同期先には変更が適用されず、このイベントは発生しません。同様に、同期元の廃棄標識を同期先に伝達させる場合はメタデータしか更新されず、同期先ファイル システムは変更されません。このような場合、このイベントは発生しません。
OnApplyingChange からエラーが返された場合、Sync Framework は現在の変更バッチの処理を停止し、IFileSyncProvider の ProcessChangeBatch メソッドからエラー コードを返します。