7z командная строка для сжатия папок

Я пытаюсь заархивировать /7z папки с помощью командной строки 7zG.exe. Код у меня работает для файлов, но не папок. Может кто-нибудь показать мне правильный путь с помощью командной строки 7z для сжатия папок? Вот пример кода, который работает только для файлов. Всякий раз, когда я пытаюсь запустить этот код, 7zip показывает окно с сообщением "Неверный параметр"

string sourceName = "Folder\Folder1";
string targetName = "Example.gz";

// 1
// Initialize process information.
//
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "7zG.exe";

// 2
// Use 7-zip
// specify a=archive and -tgzip=gzip
// and then target file in quotes followed by source file in quotes
//
p.Arguments = "a -tgzip \"" + targetName + "\" \"" + sourceName + "\" -mx=9";
p.WindowStyle = ProcessWindowStyle.Hidden;

// 3.
// Start process and wait for it to exit
//
Process x = Process.Start(p);
x.WaitForExit();

3 ответа

Решение

Как указано в разделе комментариев, вы должны использовать 7za.exe

Эта ссылка дает вам полный пример строки

Ваш код будет выглядеть так:

string sourceName = "Folder\Folder1";
string targetName = "Example.gz";

ProcessStartInfo p = new ProcessStartInfo();
//first change
p.FileName = "7za.exe"; 
//second change
p.Arguments = "a -tzip \"" + targetName + "\" \"" + sourceName + "\" -mx=9"; 
p.WindowStyle = ProcessWindowStyle.Hidden;
Process x = Process.Start(p);
x.WaitForExit();

gzip так же как bzip2 являются только алгоритмами сжатия и не могут использоваться для сжатия структуры файловой системы (например, папок, папок с файлами и т. д.).

На самом деле им обычно предшествует tar сжатие (поддерживающее папки), чтобы получить известность (в частности, в системах на основе Unix) tar.gz а также tar.bz2 архивы.

В вашем случае вы можете использовать -tzip или же -t7zip чтобы напрямую сжать папку:

p.Arguments = "a -t7z \"" + targetName + "\" \"" + sourceName + "\" -mx=9";

Кстати, вы должны использовать 7za.exe вместо 7zG.exe поскольку последний является модулем GUI, тогда как первый является автономной версией 7zip для командной строки (т. е. он не зависит от какой-либо другой библиотеки DLL), как указано в руководстве 7zip:

7z.exe - версия 7-Zip для командной строки. 7z.exe использует 7z.dll из пакета 7-Zip. 7z.dll также используется файловым менеджером 7-Zip.

7za.exe (a = only) является автономной версией 7-Zip. 7za.exe поддерживает только форматы 7z, lzma, cab, zip, gzip, bzip2, Z и tar. 7za.exe не использует внешние модули.

Ты можешь найти 7za.exe в дополнительном пакете, например для версии 9.22, вы можете найти его в архиве 7z922_extra.7z ( ссылка).

Попробуйте с этой командой:

7za  -tzip <archive-name> <folder-name>
Другие вопросы по тегам