FSCTL_MOVE_FILE IOCTL (winioctl.h)

将文件的一个或多个虚拟群集从一个逻辑群集重定位到同一卷内的另一个逻辑群集。 此操作在碎片整理期间使用。

若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to volume
  FSCTL_MOVE_FILE,              // dwIoControlCode
  (LPVOID) lpInBuffer,          // MOVE_FILE_DATA structure
  (DWORD) nInBufferSize,        // size of input buffer
  NULL,                         // lpOutBuffer
  0,                            // nOutBufferSize
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

注解

FSCTL_MOVE_FILE控制代码将文件的一个或多个虚拟群集从一个逻辑群集重新定位到同一卷中的另一个逻辑群集。 如果要移动的文件是稀疏或压缩的文件,则移动的粒度为 16 个群集;否则,粒度为一个群集。

若要将打开的文件标记为不进行碎片整理,请使用在 lpInBuffer 参数中传递的 MARK_HANDLE_INFO 结构的 HandleInfo 成员中的 MARK_HANDLE_PROTECT_CLUSTERSFSCTL_MARK_HANDLE 控制代码调用 DeviceIoControl 函数。

请注意,带FSCTL_GET_VOLUME_BITMAP控制代码的 DeviceIoControl 函数返回的位图表示一个时间点,如果卷具有写入活动,则读取该位图后可能立即不正确。 因此,尽管最近的位图指示群集未分配,但有可能尝试将群集移动到分配的群集上。 使用 FSCTL_MOVE_FILE 的程序必须为此可能性做好准备。

有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。

有关FSCTL_MOVE_FILE控制代码支持的文件、流和流类型的列表,请参阅重整文件主题的重整支持的文件、流和流类型部分。

在 Windows 8 和 Windows Server 2012 中,以下技术支持此代码。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winioctl.h (包括 Windows.h)

另请参阅