次の方法で共有


MOVE_FILE_DATA 構造体 (winioctl.h)

FSCTL_MOVE_FILE 制御コードの入力データを格納します。

構文

typedef struct {
  HANDLE        FileHandle;
  LARGE_INTEGER StartingVcn;
  LARGE_INTEGER StartingLcn;
  DWORD         ClusterCount;
} MOVE_FILE_DATA, *PMOVE_FILE_DATA;

メンバー

FileHandle

移動するファイルへのハンドル。

ファイルへのハンドルを取得するには、 CreateFile を使用します

ファイルが暗号化されている場合、ハンドルにはFILE_READ_DATA、FILE_WRITE_DATAFILE_APPEND_DATA、またはFILE_EXECUTEアクセス必要です。 詳細については、「 ファイル のセキュリティとアクセス権」を参照してください。

StartingVcn

移動する最初のクラスターの VCN (ファイルの先頭を基準としたクラスター番号)。

StartingLcn

VCN の移動先となる LCN (ボリューム上のクラスター番号)。

ClusterCount

移動するクラスターの数。

注釈

この構造体に入力するデータを取得するには、 DeviceIoControl 関数と FSCTL_GET_RETRIEVAL_POINTERS コントロール コードを使用します。

FAT ファイル システム ボリューム上のディレクトリの最初のクラスターを移動できません。

可能なときは、互いに相対的に配置された 16 キロバイト (KB) 単位のブロックで、データを移動してください。 これにより、シャドウ コピーが有効になっているときのコピー オン ライトのオーバーヘッドが軽減されます。これは、次の条件が発生すると、シャドウ コピー領域が増大し、パフォーマンスが低下するためです。

  • 移動要求のブロック サイズが 16 KB 以下であること。
  • 移動の差分が 16 KB 単位ではないこと。
移動の差分は、ソース ブロックの開始からターゲット ブロックの開始までのバイト数です。 つまり、X から Y を引いた絶対値が 16 KB の偶数倍の場合、オフセット X (ディスク上) から始まるブロックを開始オフセット Y に移動できます。 そのため、4 KB クラスターを想定すると、クラスター 3 からクラスター 27 への移動は最適化されますが、クラスター 18 からクラスター 24 への移動はされません。 mod(3,4) = 3 = mod(27,4) であることに注意してください。 Mod 4 が選択されたのは、それぞれ 4 KB の 4 つのクラスターが16 KB に相当するためです。 そのため、16 KB のクラスター サイズにフォーマットされたボリュームでは、すべての移動ファイルが最適化される結果になります。

シャドウ コピーに関する詳細については、ボリューム シャドウ コピー サービスに関する記事を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header winioctl.h (Windows.h を含む)

こちらもご覧ください

ファイルのデフラグ

FSCTL_GET_RETRIEVAL_POINTERS

FSCTL_MOVE_FILE

GetFileAttributes

GetFileAttributesEx

GetFileInformationByHandle