Поделиться через


FSCTL_SET_ZERO_DATA IOCTL (winioctl.h)

Заполняет указанный диапазон файла нулями (0). Если файл разрежен или сжатый, файловая система NTFS может освободить место на диске в файле. При этом диапазон байтов задается равным нулю (0), не расширяя размер файла.

Для выполнения этой операции вызовите функцию DeviceIoControl со следующими параметрами.

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

Комментарии

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

Если вы используете функцию WriteFile для записи нулей (0) в разреженный файл, файловая система выделяет место на диске для записываемых данных. Если вы используете управляющий код FSCTL_SET_ZERO_DATA для записи нулей (0) в разреженный файл и область нуля (0) достаточно велика, файловая система может не выделить место на диске.

Если вы используете управляющий код FSCTL_SET_ZERO_DATA для записи нулей (0) в неразреженный файл, в файл записываются нули (0). Система выделяет дисковое хранилище для всего нулевого диапазона (0), что эквивалентно использованию функции WriteFile для записи нулей (0) в файл.

Метки времени могут быть неправильно обновлены для удаленного файла. Чтобы обеспечить согласованность результатов, используйте небуферизованный ввод-вывод.

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

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

Требования

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

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