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


Сжатие и распаковка файлов

Тома файловой системы NTFS поддерживают сжатие файлов по отдельности. Алгоритм сжатия файлов, используемый файловой системой NTFS, Lempel-Ziv сжатие. Это алгоритм сжатия без потерь , который означает, что никакие данные не теряются при сжатии и распаковки файла, в отличие от алгоритмов сжатия с потерями , таких как JPEG, где некоторые данные теряются при каждом сжатии и распаковки данных.

Сжатие данных уменьшает размер файла за счет минимизации избыточных данных. В текстовом файле избыточные данные могут быть часто встречающиеся символы, такие как символ пробела, или общие гласные, такие как буквы e и a; это также могут быть часто встречающиеся символьные строки. Сжатие данных создает сжатую версию файла путем минимизации этих избыточных данных.

Каждый тип алгоритма сжатия данных сводит к минимуму избыточные данные уникальным образом. Например, алгоритм кодирования Хаффмана назначает код символам в файле в зависимости от частоты этих символов. Другой алгоритм сжатия, называемый кодировкой длины выполнения, создает двухкомпонентное значение для повторяющихся символов: в первой части указывается количество повторов символа, а во второй — символ. Другой алгоритм сжатия, известный как алгоритм Лемпеля-Зива, преобразует строки переменной длины в коды фиксированной длины, которые занимают меньше места, чем исходные строки.

Сжатие файловой системы NTFS

В файловой системе NTFS сжатие выполняется прозрачно. Это означает, что его можно использовать без внесения изменений в существующие приложения. Сжатые байты файла недоступны для приложений; они видят только несжатые данные. Поэтому приложения, которые открывают сжатый файл, могут работать с ним так, как если бы он не был сжатым. Однако эти файлы нельзя скопировать в другую файловую систему.

Если сжать файл размером более 30 гигабайт, сжатие может завершиться неудачно.

В следующих разделах описывается сжатие файловой системы NTFS:

Библиотеки сжатия и распаковки файлов

Библиотеки сжатия и распаковки файлов принимают существующий файл или файлы и создают файл или файлы, которые являются сжатыми версиями оригиналов. Сжатие также без потерь, но оно не является прозрачным для приложений. Приложение может работать с такими файлами только с помощью библиотеки сжатия файлов. Кроме того, единственные операции, которые можно выполнить с такими файлами, — это создание сжатого файла из исходного файла и восстановление исходных данных из распаковки версии. Редактирование обычно не поддерживается, а поиск ограничен, если поддерживается вообще.

Как правило, приложение вызывает функции в Lz32.dll для распаковки данных, сжатых с помощью Compress.exe. Функции также могут обрабатывать файлы, не пытаясь распаковать их.

Функции в Lz32.dll можно использовать для распаковки одного или нескольких файлов. Их также можно использовать для распаковки сжатых файлов по частям за раз.

В следующих разделах описана распаковка файлов, предоставляемая функциями в Lz32.dll.

Шкафы

Шкафы создаются с помощью библиотеки сжатия, которая поддерживает такие функции, как растягивание дисков и сжатие нескольких файлов. Дополнительные сведения см. в разделе Набор средств разработки программного обеспечения в Кабинете: https://msdn.microsoft.com/library/dncabsdk/html/cabdl.asp.

В этом разделе

Раздел Описание
Атрибут сжатия
На томе файловой системы NTFS каждый файл и каталог имеет атрибут сжатия.
Состояние сжатия
Каждый файл и каталог на томе, поддерживающий сжатие для отдельных файлов и каталогов, имеет состояние сжатия.
Получение размера сжатого файла
Чтобы получить сжатый размер файла, используйте функцию GetCompressedFileSize.
Распаковка одного файла
Приложение может распаковыть один сжатый файл с помощью функций LZOpenFile, LZCopy и LZClose.
Распаковка нескольких файлов
Приложение может распаковыть несколько файлов с помощью функций LZOpenFile, LZCopy и LZClose.
Чтение из сжатых файлов
Приложение может распаковыть сжатый файл по частям за раз с помощью функций LZSeek и LZRead.