Compactação e descompactação de arquivos

Os volumes do sistema de arquivos NTFS dão suporte à compactação de arquivo individualmente. O algoritmo de compactação de arquivo usado pelo sistema de arquivos NTFS é Lempel-Ziv compactação. Esse é um algoritmo de compactação sem perdas , o que significa que nenhum dado é perdido ao compactar e descompactar o arquivo, em vez de algoritmos de compactação com perda , como JPEG, em que alguns dados são perdidos sempre que ocorrem compactação e descompactação de dados.

A compactação de dados reduz o tamanho de um arquivo minimizando dados redundantes. Em um arquivo de texto, os dados redundantes podem ocorrer frequentemente caracteres, como o caractere de espaço ou vogais comuns, como as letras e e a; ele também pode estar ocorrendo com frequência cadeias de caracteres. A compactação de dados cria uma versão compactada de um arquivo minimizando esses dados redundantes.

Cada tipo de algoritmo de compactação de dados minimiza os dados redundantes de maneira exclusiva. Por exemplo, o algoritmo de codificação Huffman atribui um código a caracteres em um arquivo com base na frequência com que esses caracteres ocorrem. Outro algoritmo de compactação, chamado de codificação de comprimento de execução, gera um valor de duas partes para caracteres repetidos: a primeira parte especifica o número de vezes que o caractere é repetido e a segunda parte identifica o caractere. Outro algoritmo de compactação, conhecido como algoritmo Lempel-Ziv, converte cadeias de caracteres de comprimento variável em códigos de comprimento fixo que consomem menos espaço do que as cadeias de caracteres originais.

A compactação de arquivos do sistema de arquivos NTFS

No sistema de arquivos NTFS, a compactação é executada de forma transparente. Isso significa que ele pode ser usado sem a necessidade de alterações em aplicativos existentes. Os bytes compactados do arquivo não são acessíveis para aplicativos; eles veem apenas os dados descompactados. Portanto, os aplicativos que abrem um arquivo compactado podem operar nele como se não fossem compactados. No entanto, esses arquivos não podem ser copiados para outro sistema de arquivos.

Se você compactar um arquivo maior que 30 gigabytes, a compactação poderá não ter êxito.

Os tópicos a seguir identificam a compactação de arquivos do sistema de arquivos NTFS:

Bibliotecas de compactação e descompactação de arquivos

As bibliotecas de compactação e descompactação de arquivos pegam um arquivo ou arquivos existentes e produzem um arquivo ou arquivos que são versões compactadas dos originais. A compactação também é sem perdas, mas a compactação não é transparente para aplicativos. Um aplicativo só pode operar nesses arquivos com a assistência de uma biblioteca de compactação de arquivos. Além disso, as únicas operações que você pode executar nesses arquivos são criar um arquivo compactado de um original e recuperar os dados originais da versão descompactada. Normalmente, não há suporte para edição e a busca é limitada se houver suporte.

Normalmente, um aplicativo chama funções em Lz32.dll para descompactar dados que foram compactados usando Compress.exe. As funções também podem processar arquivos sem tentar descompactá-los.

Você pode usar as funções em Lz32.dll para descompactar arquivos únicos ou múltiplos. Você também pode usá-los para descompactar arquivos compactados por parte de cada vez.

Os tópicos a seguir identificam a descompactação de arquivo fornecida pelas funções no Lz32.dll:

Armários

Os gabinetes são criados por uma biblioteca de compactação que dá suporte a recursos como abrangência de disco e compactação de vários arquivos. Para obter informações adicionais, consulte o Kit de Desenvolvimento de Software de Gabinete: https://msdn.microsoft.com/library/dncabsdk/html/cabdl.asp.

Nesta seção

Tópico Descrição
Atributo de compactação
Em um volume do sistema de arquivos NTFS, cada arquivo e diretório tem um atributo de compactação.
Estado de compactação
Cada arquivo e diretório em um volume que dá suporte à compactação para arquivos e diretórios individuais tem um estado de compactação.
Obtendo o tamanho de um arquivo compactado
Para obter o tamanho compactado de um arquivo, use a função GetCompressedFileSize.
Descompactando um único arquivo
Um aplicativo pode descompactar um único arquivo compactado usando as funções LZOpenFile, LZCopy e LZClose.
Descompactando vários arquivos
Um aplicativo pode descompactar vários arquivos usando as funções LZOpenFile, LZCopy e LZClose.
Lendo de arquivos compactados
Um aplicativo pode descompactar um arquivo compactado por vez usando as funções LZSeek e LZRead.