5

I am trying to zip/7z folders using the command line of 7zG.exe. The code I have works for files but not folders. Could someone please show me the correct way using 7z command line to compress folders? Here is the sample code that works for files only. Whenever I try running this code 7zip shows a messagebox saying "Invalid Parameter"

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();
4

3 回答 3

10

如评论部分所述,您应该使用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();
于 2013-10-09T20:41:03.363 回答
5

gzip以及bzip2只是压缩算法,不能用于压缩文件系统结构(例如文件夹、带有文件的文件夹等)

事实上,它们通常在tar压缩之前(即支持文件夹),以获得著名的(特别是在基于 unix 的系统中)tar.gztar.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 使用 7-Zip 包中的 7z.dll。7z.dll 也被 7-Zip 文件管理器使用。

7za.exe(a = 单独)是 7-Zip 的独立版本。7za.exe 仅支持 7z、lzma、cab、zip、gzip、bzip2、Z 和 tar 格式。7za.exe 不使用外部模块。

您可以7za.exe在额外的包中找到,例如对于版本 9.22,您可以在名为7z922_extra.7z( link ) 的存档中找到它。

于 2013-10-09T20:49:41.593 回答
0

试试这个命令:

7za  -tzip <archive-name> <folder-name>
于 2013-10-09T20:37:40.440 回答