直到不久前,我什至不知道您可以使用 Windows 的内置压缩来压缩特定的文件夹、文件甚至整个驱动器。一个简单的方法是转到属性并选中“压缩内容以节省磁盘空间”,一切就绪。
第一次听说它,我认为它就像WinZip压缩文件以减小大小或将所有文件合并到一个压缩文件中。但它似乎有不同的用例。
最有趣的是文件被压缩了,但文件的哈希输出保持不变(使用第三方哈希计算器的简短实验)。这怎么可能是真的?如果输入发生变化,则哈希输出必须发生变化(除非发生非常罕见且偏离主题的冲突)。例如,假设我压缩了一个名为MYDOCUMENT.pdf的文件,我可以保持这种方式,将其放在 USB 驱动器或其他新安装的 PC 上,然后像普通文件一样使用它,而无需手动解压缩等?
当我在属性中检查文件大小时,大小甚至没有改变一个字节,但只有“磁盘大小”在减少。所以看起来文件的数据保持原样(相同的哈希值可能证明了这一点),但它只是在从操作系统端读取它时压缩和解压缩。
另一个问题是:通过键入“compact.exe /compactos:always”,还有另一种使用命令行提示符的压缩算法。两者有什么区别?
这些天Windows让我头疼:/
NTFS 压缩究竟对文件做了什么?
默认情况下,它使用 Lempel-Ziv 压缩的变体透明地压缩它们:
来源:FSCTL_SET_COMPRESSION 控制代码
当您读取文件(例如计算文件哈希)时,它会在运行中透明地解压缩。
还有另一种使用命令行提示符的压缩算法
compact
显示或更改 NTFS 分区上文件的压缩。always
将压缩所有操作系统二进制文件并将系统状态设置为非压缩。它仅支持
exe
文件的不同算法:来源:Compact - 压缩文件 - Windows CMD - SS64.com
延伸阅读
@DavidPostill 的回答是正确且完整的,但让我也尝试解释一下:
NTFS 压缩对使用它的任何应用程序都是透明的。这意味着对于每个:
性能:理论上,由于正在发生压缩/解压缩,读取/写入文件会变得有些慢。但是,如今这通常可以忽略不计,并且也可能被需要存储较少信息的驱动器所抵消。
管理:
compact.exe
还向您展示了这一点,还允许您启用/禁用文件压缩。compact.exe /CompactOs:always
将设置 Windows 压缩所有操作系统二进制文件。