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_DATAFILE_WRITE_DATAFILE_APPEND_DATAFILE_EXECUTE 访问权限。 有关详细信息,请参阅 文件安全性和访问权限

StartingVcn

VCN (相对于要移动的第一个群集的文件开头) 的群集编号。

StartingLcn

LCN (VCN 要移动到的卷) 上的群集编号。

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 个集群,每个群集 4 KB 相当于共 16 KB。 因此,格式化为 16 KB 群集大小的卷将优化所有移动文件。

有关卷影复制的详细信息,请参阅卷影复制服务

要求

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

另请参阅

对文件进行碎片整理

FSCTL_GET_RETRIEVAL_POINTERS

FSCTL_MOVE_FILE

GetFileAttributes

GetFileAttributesEx

GetFileInformationByHandle