常见问题解答(FAQ)

用户常见问题解答

我能否使用 7-Zip 用于商业用途?

可以,7-Zip 是自由软件。您可以在任何电脑上使用它,您不需要对 7-Zip 进行捐赠或付钱。

我如何在 Windows 7 以及 Windows Vista 中让 7-Zip 关联文件?

您必须以管理员方式运行一次 7-Zip 文件管理器。右键点击 7-Zip 文件管理器图标,选择“以管理员方式运行”。然后您就可以在设置中关联文件了。

为什么新版本 7-Zip 创建的某些 7z 压缩包要比老版本的 7-Zip 大?

新版本的 7-Zip(从 15.06 开始)为固实 7z 压缩包默认使用了另一种文件排序顺序。

老版本的 7-Zip(15.06 之前的版本)使用的排序方法为「按类型」(按文件扩展名)。

新版本的 7-Zip 支持两种文件排序方法:

  • 按名称排序 - 默认排序。
  • 按类型排序,如果在「添加到压缩包」窗口中的参数字段中增加了「qs」参数(或命令行版本中的 -mqs 开关)。

如果字典大小小于总文件大小,不同的排序方法可能会在压缩比上产生很大差异。如果在不同的文件夹中包含类似的文件,那么「按类型」排序在某些情况下可能提供更好的压缩比。

请注意「按类型」排序的缺点。例如使用「按名称」排序的 NTFS 卷,所以如果一个压缩包使用了别的排序方法,那么对于这些非常规的文件排序在机械硬盘(HDD)设备上的操作速度可能会受到影响(机械硬盘的寻道时间通常会比较慢)。

您可以通过下列方法提升压缩比:

  • 增大字典大小。在没使用「qs」参数时有效。
  • 在「添加到压缩包」窗口中的参数字段中增加了「qs」参数(或命令行版本中的 -mqs 开关)。

如果您认为非常规文件排序对您并不是问题,并且使用高压缩比配合较小的字典大小对您来说更重要,那么就使用「qs」模式。

为何 7-Zip 无法打开部分 ZIP 压缩包?

绝大多数是因为该压缩包的文件头错误。ZIP 压缩包包含两个文件头,7-Zip 对两个文件头都进行读取,如果其中任意一个包含错误数据,7-Zip 就不会打开它。而其它支持 ZIP 格式的程序能够打开部分有错误的压缩包,因为那些程序通常只读取一分文件头,或者程序将错误的数据忽略。

所以,如果您有类似的压缩包,请不要向 7-Zip 技术支持询问其原因。您最好试着找到创建此压缩包的原程序,并向他们的技术支持发送错误报告,来告知它与 ZIP 格式不完全兼容。

目前同样还有一些 ZIP 压缩包使用的是 7-Zip 不支持的编码格式,例如 WAVPack (WinZip)。

为何 7-Zip 无法打开部分 RAR 压缩包?

7-Zip 9.20 只支持 RAR 2/3/4 格式,并不支持 RAR5 压缩包。但最新版本的 7-Zip 已支持 RAR5 压缩包。

为什么从 7-Zip 拖拽文件到 Windows 资源管理器时要先提取到临时文件?

7-Zip 并不知道拖拽到的目标路径。只有 Windows 文件管理器知道拖拽的目标路径。并且 Windows 资源管理器需要在硬盘上有已解压缩的文件才可以往下进行操作。所以 7-Zip 要先提取文件到临时文件夹,然后 7-Zip 会通知 Windows 资源管理器,之后由资源管理器将文件复制到拖拽的目标路径。

如果想避免使用临时文件,您可以使用提取命令,或在 7-Zip 文件管理器之内进行拖拽操作。

为什么在命令行版本中无法添加没有扩展名的文件?

您大概是使用了 . 通配符。7-Zip 使用的并不是系统处理通配符的默认方法,因而 7-Zip 不支持其它通配符规则,在系统中 . 相当于所有文件。而 7-Zip 会将其视为任何扩展名的全部文件。所以,要处理所有文件您必须使用 * 通配符。

为什么 -r 选项不会像我预期的那样执行?

通常情况下您并不需要使用 -r 选项。7-Zip 在没有 -r 选项的情况下一样可以压缩子文件夹。

示例 1:

  7z.exe a c:\a.7z "C:\Program Files"

压缩 “C:\Program Files” 目录,包括所有的子文件夹。

示例 2:

  7z.exe a -r c:\a.7z "C:\Program Files"

搜索并压缩 C:\ 中所有包含 “Program Files” 的文件夹(例如,在 “C:\WINDOWS” 中)。

如果您只想压缩特定的扩展名,可以使用 -r 开关:

  7z a -r c:\a.zip c:\dir\*.txt

压缩所有的 c:\dir\ 下及其子文件夹中的 *.txt 文件。

我如何在压缩包中存储完整路径?

7-Zip 默认只存储相对文件路径(无驱动器盘符)。您可将要压缩的所有文件放在一个单独的文件夹中然后使用下面的方法:

  cd /D C:\dir1\
  7z.exe a c:\a.7z file1.txt dir2\file2.txt

为什么 7-Zip 不能在 32 位 Windows 下使用更大的字典文件?

32 位 Windows 只能为每个应用程序分配 2 GB 的虚拟空间。同样这 2 GB 空间还会包含其他的文件碎片(例如一些要调用的 DLL 文件),所以 7-Zip 无法分配更大的虚拟空间。但在 64 位 Windows 中就不会有限制,如果您有足够大的物理内存,您可以使用任意大小的字典文件。

如何使用安静模式安装 7-Zip?

「/S」用于安静模式安装;/D=dir,为指定的“输出目录”。这些选项是区分大小写的。 对于 msi 安装包:使用 /q INSTALLDIR=”C:\Program Files\7-Zip” 参数。

如何恢复受损的 7z 压缩包?

当您遇到下列情形时说明压缩包已受损:

  • 您可以打开压缩包并看到里面的文件,但是当您使用释放或测试功能时,提示「数据错误」或「CRC 校验错误」。
  • 当您尝试打开压缩包时,出现错误提示「无法作为压缩包打开文件『a.7z』」。

如果遇到上述情形,恢复部分数据是有可能的,请查看数据恢复流程:

恢复受损 7z 压缩包(英文,由于此页面会时常更新,并包含较多术语,原作者要求此页面保留英文)

开发者常见问题解答

为何我在使用 Visual C++ 6.0 编译 7-Zip 或 LZMA SDK 时会出现链接错误?

想要编译远吗您需要 Visual C++ 6.0 或更高版本。部分文件还需要来自 microsoft.com 的 Platform SDK。

如果您使用 MSVC,请在目录列表上方的“包括文件”及“工具 / 选项 / 目录”中的“库文件”中指定 SDK 目录。

最新的 Platform SDK 与 MSVC6 不兼容。所以您必须使用 Windows Server 2003 PSDK(2003 二月)。

我能否使用 7-Zip 中的 EXE 或 DLL 文件用于商业用途?

可以,但是如果这样的话您必须在文档中注明:(1) 您使用了 7-Zip 程序的某部分文件 (2) 7-Zip 发布于 GNU LGPL 协议 (3) 必须有链接到 www.7-zip.org 的链接,能够找到 7-Zip 的源代码。

如何在我的程序中添加对 7z 格式的支持?

一种方法是使用 7za.dll(可到 sf.net 站点下载)。7za.dll 通过 COM 接口工作。但是它并没有使用标准的 COM 接口。您可以在源代码中找到一些例子。完整的例子就是 7-Zip 本身,7-Zip 本身就通过此 dll 允许。目前还有一些其它的应用程序使用了 7za.dll:WinRAR、PowerArchiver 等等。

其它的方法是调用命令行版本 7za.exe。

我能否在商业应用程序中使用 7-Zip 源代码?

7-Zip 基于 GNU LGPL 许可发布。所以您必须遵守此许可中的条款。简单的说,那意味着任何 LGPL 的代码必须在 LGPL 许可中保持完整性。例如,您可以更改 7-Zip 源代码,并且将它们编译成 DLL。但是这些更改后的 DLL 的源代码(包括您更改、增加、删除的内容)必须遵守 LGPL 或 GPL 许可。您的应用程序的其它源代码可以是属于任意许可的。想设想允许用户及开发者更改基于 LGPL 发布的代码并重编成 DLL。请到 https://www.gnu.org/ 了解更多信息。同样也可以了解 LZMA SDK,提供了相比 LGPL 更高自由度的许可。


Copyright (C) 2021 Igor Pavlov. The site is hosted at AWS