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


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

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

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

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

Сжатие файлов файловой системы 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.