FSCTL_SET_COMPRESSION IOCTL (winioctl.h)

Define o estado de compactação de um arquivo ou diretório em um volume cujo sistema de arquivos dá suporte à compactação por arquivo e por diretório. Você pode usar FSCTL_SET_COMPRESSION para compactar ou descompactar um arquivo ou diretório nesse volume.

Para executar essa operação, chame a função DeviceIoControl com os parâmetros a seguir.

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
);

Comentários

O algoritmo de compactação LZNT1 é o único algoritmo de compactação implementado. Como resultado, o algoritmo de compactação LZNT1 é usado como o método de compactação DEFAULT.

Se o sistema de arquivos do volume que contém o arquivo ou diretório especificado não oferecer suporte a compactação por arquivo ou por diretório, a operação falhará.

A alteração do estado de compactação do arquivo ou diretório ocorre de forma síncrona com a chamada para DeviceIoControl.

Para recuperar o estado de compactação de um arquivo ou diretório, use o código de controle FSCTL_GET_COMPRESSION .

Para recuperar o atributo de compactação de um arquivo ou diretório, use a função GetFileAttributes . O atributo de compactação indica se um arquivo ou diretório é compactado. O estado de compactação indica se um arquivo ou diretório é compactado e, se for, o formato dos dados compactados.

Os diretórios não são realmente compactados por essa operação. Em vez disso, a operação define o estado padrão para arquivos criados no diretório a serem compactados.

Observe que os carimbos de data/hora podem não ser atualizados corretamente para um arquivo remoto. Para garantir resultados consistentes, use E/S sem cofres.

Há suporte para compactação de arquivos de um tamanho máximo não compactado de 30 gigabytes.

Em Windows 8 e Windows Server 2012, esse código é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 Sim
TFO (Failover transparente) do SMB 3.0 No
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) No
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Confira o comentário
ReFS (Sistema de Arquivos Resiliente) No

CsvFs não dá suporte à criação de um diretório compactado. CsvFs permite tornar o arquivo compactado somente quando o arquivo é aberto exclusivamente por um nó. O Failover Transparente do SMB 3.0 e o Scale-Out não dão suporte a arquivos compactados NTFS. A chamada FSCTL não está bloqueada, mas não tem suporte."

Operações transacionadas

Não é possível alterar o estado de compactação de um arquivo aberto com CreateFileTransacted.

Para obter mais informações sobre transações, consulte NTFS transacional.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winioctl.h (inclua Windows.h)

Confira também