ファイルの変更の検出

Sync Framework ファイル同期プロバイダーは、同期スコープ内のファイルおよびフォルダーに加えられた変更を自動的に検出します。

暗黙的な変更の検出と明示的な変更の検出

変更の検出は、同期セッションが開始される前に実行する必要があります。既定では、変更の検出は、Sync Framework が GetChangeBatch または ProcessChangeBatch をプロバイダーで初めて呼び出すときに自動的に実行されます。

マネージ コード : アプリケーションがプロバイダーを初期化するときに ExplicitDetectChanges フラグを指定する場合、セッションを開始する前に DetectChanges メソッドを明示的に呼び出す必要があります。

アンマネージ コード : アプリケーションがプロバイダーを初期化するときに FILESYNC_INIT_FLAG_DISABLE_IMPLICIT_DETECT_CHANGES フラグを指定する場合、セッションを開始する前に IFileSyncProvider::DetectChanges メソッドを明示的に呼び出す必要があります。

組み込みの変更検出アルゴリズム

Sync Framework には、同期スコープ内のファイルおよびフォルダーに加えられた変更を自動的に検出するためのアルゴリズムが組み込まれています。

次のいずれかのプロパティが変更されると、変更が報告されます。

  • ファイルが最後に変更された時刻。

  • ファイルに対して計算されたハッシュの値 (ハッシュが有効な場合)。

  • ファイル サイズ。

  • ファイル名またはフォルダー名。大文字と小文字が区別されます。

  • プロバイダーによって処理されるすべてのファイル属性。

あるファイルの作成時刻、サイズ、およびハッシュ値 (ハッシュが使用されている場合) が既知のファイルと同じであるにもかかわらずファイル名またはパスが異なる場合は、ファイルの移動または名前変更が報告されます。これらの条件に一致するファイルが複数存在する場合は、元のファイルが削除され、新しいファイルが作成されたと見なされます。

Sync Framework フォルダーの移動や名前変更は、元のフォルダーが削除され、新しいフォルダーが作成されたと見なされます。フォルダー内のファイルは、移動されたと見なされます。したがって、通常は、この場合にファイル データを再送信する必要はありません。

変更の検出のためのハッシュ値の計算

アプリケーションがプロバイダーを初期化するときに CompareFileStreams フラグ (マネージ コードの場合) または FILESYNC_INIT_FLAG_USE_HASHING フラグ (アンマネージ コードの場合) を指定する場合、プロバイダーは、ファイル ストリームのすべてのコンテンツを使用して各ファイルのハッシュ値を計算します。次にプロバイダーは、これらのハッシュ値を比較することで、より堅牢な変更の検出を実現できます。ただし、パフォーマンスは若干低下します。

参照

リファレンス

IFileSyncProvider インターフェイス
FILESYNC_INIT_FLAGS 列挙体
FileSyncProvider
FileSyncOptions

概念

ファイルの同期