我想使用 将来自不同文件夹的大量不同名称的文件添加到单个 7-Zip 存档中7za.exe
。这应该很简单,但结果却非常麻烦。
我创建了一个包含路径的文件(7za a out.7z @list.txt
),但一旦文件太多(约 100 个),它就会失败。显然,参数文件的内容被推送到命令行缓冲区 [编辑:这可能是我的错误信息,但这不是原因],这实在是太小了(要添加的文件数量超过一百万)。
由于工作方式的原因,将流程拆分成逐个添加文件是不可行的7za
:添加下一个文件时,它会创建存档的副本,将文件添加到副本中,最后替换原始文件。一旦存档大小达到几百 MB,这个过程就会变得非常慢。
到目前为止,我结合使用了这两种方法,每次循环添加十几个文件,但这是一种不可靠的方法,而且速度仍然很慢。有没有更好的方法?
我尝试使用 7-Zip 包装器 DLL(我是一名 C# 程序员),但它们都无法可靠地工作,并且我被反复建议直接使用7za
。
答案1
由于我处理这个问题的方式很愚蠢,我花了很多时间才找出真正的原因。这是因为漏洞在 7zip 中我没有想到的地方。
如果在 cli 版本 4.57 中使用列表文件,则会出现错误的错误通知。如果列表文件包含几行绝对路径(似乎相对路径有效),这些路径指向不同目录中的同名文件,则会出现“文件名重复”错误。
我能够使用不同目录中的任意两个同名文件及其在列表文件中的绝对路径来重现该问题。
在原始问题中,当一次只添加 1 个或几个文件时,它可以工作(存档文件本身创建没有问题),因为列表文件(意外地)不包含任何此类“重复文件名”。
正式来说,它被称为功能。虽然我对此不确定,但它无疑让我和其他人感到困惑,因为它没有记录。