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>