文件压缩和解压缩

NTFS 文件系统卷支持基于单个文件的文件压缩。 NTFS 文件系统使用的文件压缩算法Lempel-Ziv压缩。 这是一种 无损 压缩算法,这意味着压缩和解压缩文件时不会丢失任何数据,这与 JPEG 等 有损 压缩算法相反,后者每次发生数据压缩和解压缩时都会丢失一些数据。

数据压缩通过最小化冗余数据来减小文件大小。 在文本文件中,冗余数据可以是频繁出现的字符,如空格字符,或常见的元音,如字母 e 和 a;它也可能是频繁出现的字符串。 数据压缩通过最小化此冗余数据来创建文件的压缩版本。

每种类型的数据压缩算法都以独特的方式最大程度地减少冗余数据。 例如, Huffman 编码算法 根据这些字符出现的频率将代码分配给文件中的字符。 另一种称为 运行长度编码的压缩算法为重复字符生成由两部分组成的值:第一部分指定字符的重复次数,第二部分标识字符。 另一种压缩算法称为 Lempel-Ziv 算法,将可变长度字符串转换为固定长度的代码,这些代码占用的空间比原始字符串少。

NTFS 文件系统文件压缩

在 NTFS 文件系统上,压缩以透明方式执行。 这意味着无需更改现有应用程序即可使用它。 应用程序的压缩字节不可访问;它们只能看到未压缩的数据。 因此,打开压缩文件的应用程序可以像未压缩文件一样对其进行操作。 但是,这些文件不能复制到另一个文件系统。

如果压缩大于 30 GB 的文件,则压缩可能不会成功。

以下主题标识 NTFS 文件系统文件压缩:

文件压缩和解压缩库

文件压缩和解压缩库采用一个或多个现有文件,并生成一个或多个文件,这些文件是原始文件的压缩版本。 压缩也是无损的,但压缩对应用程序不透明。 应用程序只能在文件压缩库的协助下对此类文件进行操作。 此外,可以对此类文件执行的唯一操作是从原始文件创建压缩文件,并从解压缩的版本恢复原始数据。 通常不支持编辑,如果完全支持,则查找将受到限制。

通常,应用程序调用 Lz32.dll 中的函数来解压缩使用 Compress.exe 压缩的数据。 函数还可以处理文件,而无需尝试解压缩它们。

可以使用 Lz32.dll 中的函数解压缩一个或多个文件。 还可以使用它们一次解压缩一部分压缩文件。

以下主题标识 Lz32.dll 中的函数提供的文件解压缩:

压缩库由支持磁盘跨越和多文件压缩等功能的压缩库创建。 有关其他信息,请参阅 Cabinet 软件开发工具包: https://msdn.microsoft.com/library/dncabsdk/html/cabdl.asp

在本节中

主题 说明
压缩属性
在 NTFS 文件系统卷上,每个文件和目录都有 一个压缩属性
压缩状态
卷上支持对单个文件和目录进行压缩的每个文件和目录都具有 压缩状态
获取压缩文件的大小
若要获取文件的压缩大小,请使用 GetCompressedFileSize 函数。
解压缩单个文件
应用程序可以使用 LZOpenFile、LZCopy 和 LZClose 函数解压缩单个压缩文件。
解压缩多个文件
应用程序可以使用 LZOpenFile、LZCopy 和 LZClose 函数解压缩多个文件。
从压缩文件读取
应用程序可以使用 LZSeek 和 LZRead 函数一次将压缩文件解压缩一部分。