文件压缩和解压缩

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 函数一次解压缩压缩的文件。