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


FSCTL_SET_COMPRESSION IOCTL (winioctl.h)

Задает состояние сжатия файла или каталога на томе, файловая система которого поддерживает сжатие по файлам и каталогам. Вы можете использовать FSCTL_SET_COMPRESSION для сжатия или распаковки файла или каталога на таком томе.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file or directory
  FSCTL_SET_COMPRESSION,            // 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
);

Комментарии

Единственный реализованный алгоритм сжатия LZNT1. В результате в качестве метода сжатия DEFAULT используется алгоритм сжатия LZNT1.

Если файловая система тома, содержащего указанный файл или каталог, не поддерживает сжатие для каждого файла или каталога, операция завершается ошибкой.

Изменение состояния сжатия файла или каталога происходит синхронно с вызовом DeviceIoControl.

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

Чтобы получить атрибут сжатия файла или каталога, используйте функцию GetFileAttributes . Атрибут сжатия указывает, сжимается ли файл или каталог. Состояние сжатия указывает, сжимается ли файл или каталог, и, если это так, формат сжатых данных.

Каталоги фактически не сжимаются этой операцией. Вместо этого операция задает состояние по умолчанию для файлов, созданных в каталоге для сжатия.

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

Сжатие файлов поддерживается для файлов размером не более 30 гигабайт без сжатия.

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

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

CsvFs не поддерживает сжатие каталога. CsvFs позволяет сжимать файл только в том случае, если файл открыт исключительно узлом. Прозрачная отработка отказа SMB 3.0 и Scale-Out не поддерживают сжатые файлы NTFS. Вызов FSCTL не блокируется, но не поддерживается".

Транзакция операций

Невозможно изменить состояние сжатия файла, открытого с помощью CreateFileTransacted.

Дополнительные сведения о транзакциях см. в разделе Transactional NTFS.

Требования

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

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