Я хотел бы добавить большое количество файлов с разными именами из разных папок в один 7-Zip архив с помощью 7za.exe
. Это должно быть просто, но это оказалось большой болью.
Я создал файл, который содержит paths ( 7za a out.7z @list.txt
), но если их слишком много (~ 100), происходит сбой. По всей видимости, содержимое файла аргумента помещается в буфер командной строки [ Редактировать : это, скорее всего, была дезинформация с моей стороны, в любом случае это была не причина ], что слишком мало (количество добавляемых файлов превышает один миллион).
Разделение процесса путем добавления файлов по одному невозможно из-за способа 7za
работы: при добавлении следующего файла он создает копию архива, добавляет файл в копию и, наконец, заменяет оригинал. Это ужасно медленно, когда размер архива достигает пары 100 МБ.
Пока что я использую комбинацию двух подходов, добавляя дюжину файлов каждый раз в цикле, но это ненадежный взлом и все еще очень медленный. Есть ли лучший способ сделать это?
Я пытался использовать DLL-библиотеки оболочки 7-Zip (я программист на C #), но ни одна из них не работала надежно, и мне неоднократно предлагалось просто использовать 7za
вместо этого.
ReadNamesFromListFile()
из файлаListFileUtils.cpp
. флаг '-a' вообще не существует, командная строка должна выглядеть примерно так7za a out.7z @in.txt
7za
. работал как шарм. предоставьте больше информации о том, как вы создаете список файлов, как организованы файлы (по пути), где находится ваш рабочий каталог и т. д. и т. д.7za/7za.exe a "C:\foo/0000.7z" -mx1 -w"C:\foo/" -- "C:\temp\list.tmp"
. Рабочий каталог - c: \ input, и все пути в list.tmp находятся в этом каталоге. (Реальные имена каталогов длиннее и глубже.)Ответы:
Из-за глупого подхода к проблеме мне потребовалось много времени, чтобы выяснить настоящую причину. Это связано с ошибкой в 7zip в месте, о котором я не думал.
Я смог воспроизвести проблему, используя любые два файла с одинаковыми именами в разных каталогах с их абсолютным путем в файле списка.
В исходном вопросе при добавлении только 1 или нескольких файлов за раз это работало (сам файл архива был создан без проблем), поскольку файл списка (случайно) не содержал таких «повторяющихся имен файлов».
Официально это называется фича. Хотя я не уверен в этом, это, без сомнения, смутило меня и других из-за отсутствия документов.
источник