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 压缩算法是唯一实现的压缩算法。 因此,LZNT1 压缩算法用作 DEFAULT 压缩方法。

如果包含指定文件或目录的卷的文件系统不支持按文件或按目录压缩,则操作将失败。

文件或目录的压缩状态更改与对 DeviceIoControl 的调用同步发生。

若要检索文件或目录的压缩状态,请使用 FSCTL_GET_COMPRESSION 控制代码。

若要检索文件或目录的压缩属性,请使用 GetFileAttributes 函数。 压缩属性指示是否压缩文件或目录。 压缩状态指示是否压缩文件或目录,以及压缩数据的格式(如果是)。

此操作实际上不会压缩目录。 相反,该操作会将目录中创建的文件的默认状态设置为压缩。

请注意,可能无法正确更新远程文件的时间戳。 若要确保结果一致,请使用非缓冲区 I/O。

最大未压缩大小为 30 GB 的文件支持文件压缩。

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

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

CsvFs 不支持压缩目录。 CsvFs 仅允许在节点以独占方式打开文件时压缩文件。 SMB 3.0 透明故障转移和 Scale-Out 不支持 NTFS 压缩文件。 FSCTL 调用不受阻止,但不受支持。”

事务处理操作

不能更改使用 CreateFileTransacted 打开的文件的压缩状态。

有关事务的详细信息,请参阅 事务 NTFS

要求

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

另请参阅