共用方式為


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,這個檔案資料表示此檔案在套用新名稱之前的現況。
  • pfSkipChange
    [out] 表示是否要略過此變更。

傳回值

  • S_OK

  • 應用程式專用的錯誤碼

備註

這個事件會提供一個機制,讓應用程式在同步處理工作階段期間動態略過變更。若要略過變更,請將 pfSkipChange 的值設定為 TRUE。略過的變更將不會套用到目的地複寫。如果每一個略過的變更都將 dwReason 設定為 FILESYNC_SKIP_REASON_APPLICATION_REQUEST,將會引發 IFileSyncProviderCallback::OnChangeSkipped 事件。

在工作階段進行期間,某些變更將會嘗試一次以上。在每一次嘗試時,都會引發這個事件。例如,嘗試刪除資料夾。因為資料夾中已經有檔案,所以此嘗試動作會失敗。在整個工作階段期間,將會繼續嘗試這個資料夾刪除作業,直到刪除作業成功,或是判斷出此工作階段期間無法進行刪除作業而且略過此作業為止。

只有當變更會影響目的地複寫上的檔案資料時,這個事件才會引發;當變更只會影響檔案的中繼資料時,則不會引發。例如,如果偵測到更新與更新之間的衝突,而且目的地系統上的檔案被選為贏家,則不會將任何變更套用到目的地,也不會引發這個事件。同樣地,從來源將標記傳播到目的地只會造成中繼資料更新,而不會變更目的地檔案系統。在此情況中,不會引發這個事件。

如果 OnApplyingChange 傳回錯誤,Sync Framework 便會停止處理目前的變更批次,並且從 IFileSyncProviderProcessChangeBatch 方法傳回錯誤碼。

請參閱

參考

IFileSyncProviderCallback 介面
FILESYNC_CHANGE_TYPE 列舉