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 кластеров; В противном случае степень детализации — один кластер.

Чтобы пометить открытый файл так, чтобы он не дефрагментировался, вызовите функцию DeviceIoControl с FSCTL_MARK_HANDLE кодом управления с MARK_HANDLE_PROTECT_CLUSTERS в элементе HandleInfoструктуры MARK_HANDLE_INFO , переданной в параметре lpInBuffer .

Обратите внимание, что точечный рисунок, возвращаемый функцией DeviceIoControl с кодом элемента управления FSCTL_GET_VOLUME_BITMAP , представляет точку во времени и может быть неправильным сразу после прочтения, если в томе есть действие записи. Таким образом, можно попытаться переместить кластер в выделенный кластер, несмотря на недавнее растровое изображение, указывающее, что кластер не выделен. Программы , использующие FSCTL_MOVE_FILE , должны быть подготовлены к такой возможности.

Сведения о последствиях перекрывающихся операций ввода-вывода для этой операции см. в разделе Примечания статьи DeviceIoControl .

Список файлов, потоков и типов потоков, поддерживаемых кодом элемента управления FSCTL_MOVE_FILE , см. в разделе Файлы, потоки и типы потоков, поддерживаемые для дефрагментации статьи Дефрагментация файлов .

В Windows 8 и Windows Server 2012 этот код поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Нет
Прозрачная отработка отказа (TFO) SMB 3.0 Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Да

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть winioctl.h (включая Windows.h)

См. также раздел