4

Я хотел бы добавить большое количество файлов с разными именами из разных папок в один 7-Zip архив с помощью 7za.exe . Это должно быть просто, но это оказалось большой болью.

Я создал файл, содержащий пути (7za a out.7z @list.txt), но если их слишком много (~ 100), происходит сбой. По-видимому, содержимое файла аргумента помещается в буфер командной строки [ Редактировать: это, скорее всего, была дезинформация с моей стороны, в любом случае это была не причина ], что слишком мало (количество добавляемых файлов превышает один миллион).

Разделение процесса путем добавления файлов по одному невозможно из-за способа, которым работает 7za : при добавлении следующего файла он создает копию архива, добавляет файл в копию и, наконец, заменяет оригинал. Это ужасно медленно, когда размер архива достигает пары 100 МБ.

Пока что я использую комбинацию двух подходов, добавляя дюжину файлов каждый раз в цикле, но это ненадежный взлом и все еще очень медленный. Есть ли лучший способ сделать это?

Я пытался использовать DLL-библиотеки оболочки 7-Zip (я программист на C #), но ни одна из них не работала надежно, и мне неоднократно предлагалось просто использовать 7za вместо этого.

1 ответ1

4

Из-за глупого подхода к проблеме мне потребовалось много времени, чтобы выяснить настоящую причину. Это связано с ошибкой в 7zip в месте, о котором я не думал.

При использовании списка файлов в Cli версии 4.57 появляется неправильное уведомление об ошибке. Если файл списка содержит несколько строк абсолютных путей (кажется, что работают относительные пути), которые указывают на файлы с одинаковыми именами в разных каталогах, появляется ошибка «Duplicate filename».

Я смог воспроизвести проблему, используя любые два файла с одинаковыми именами в разных каталогах с их абсолютным путем в файле списка.

В исходном вопросе при добавлении только 1 или нескольких файлов за раз это работало (сам файл архива был создан без проблем), поскольку файл списка (случайно) не содержал таких "повторяющихся имен файлов".

Официально это называется фича. Хотя я не уверен в этом, это без сомнения сбило меня с толку из-за отсутствия документов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .