FSCTL_SET_COMPRESSION DeviceIoControl操作设置文件系统支持每卷文件和每目录压缩的卷上的文件或目录的压缩状态。您可以使用此操作压缩或解压缩此卷上的文件或目录。
dwIoControlCode = FSCTL_SET_COMPRESSION; //操作代码
lpInBuffer ; //指向输入缓冲区的指针
nInBufferSize ; //输入缓冲区的大小
lpOutBuffer = NULL; //指向输出缓冲区的指针;不曾用过;必须为NULL
nOutBufferSize = 0; //输出缓冲区的大小不曾用过;必须为零
lpBytesReturned ; //指向由DeviceIoControl函数使用的DWORD的指针
参数
【lpInBuffer】
指向包含指定文件或目录的新压缩状态的USHORT的缓冲区。
定义了以下值:
值 | 含义 |
COMPRESSION_FORMAT_NONE | 解压文件或目录。 |
COMPRESSION_FORMAT_DEFAULT | 使用默认的压缩格式压缩文件或目录。 |
COMPRESSION_FORMAT_LZNT1 | 使用LZNT1压缩格式压缩文件或目录。 |
所有其他值 | 留作将来使用。 |
【nInBufferSize】
指定【lpInBuffer】指向的缓冲区的大小(以字节为单位)。缓冲区必须足够大以包含一个USHORT值。
【lpOutBuffer】
指向输出缓冲区。不用于此操作。设置为NULL。
【nOutBufferSize】
指定【lpOutBuffer】指向的缓冲区的大小(以字节为单位)。不用于此操作。设置为零。
【lpBytesReturned】
指向DWORD.此值不能为NULL。尽管FSCTL_SET_COMPRESSION操作不产生输出数据,【lpOutBuffer】应为NULL,但DeviceIoControl函数使用【lpBytesReturned】指向的变量。操作后,该变量的值没有意义。
返回值
如果操作成功,DeviceIoControl返回TRUE。
如果操作失败,DeviceIoControl返回FALSE。要获取扩展错误信息,请调用GetLastError.
备注
在这个版本中,LZNT1是唯一实现的压缩算法。因此,LZNT1将被用作DEFAULT压缩方法。未来的版本可能有额外的压缩方法,可用作DEFAULT。
如果包含指定文件或目录的卷的文件系统不支持每个文件或每个目录的压缩,则FSCTL_SET_COMPRESSION操作将失败。
Windows NT版本3.51支持使用NTFS格式化的卷上的文件压缩。
文件或目录的压缩状态更改与调用DeviceIoControl同步发生。
您可以使用FSCTL_GET_COMPRESSION DeviceIoControl操作获取文件或目录的压缩状态。
您可以通过调用GetFileAttributes函数来获取文件或目录的压缩属性。压缩属性指示文件或目录是否被压缩。压缩状态表示文件或目录是否被压缩,如果是压缩数据的格式。
也可以看看