C# 用于压缩文件夹的7z命令行

C# 用于压缩文件夹的7z命令行,c#,7zip,C#,7zip,我正在尝试使用7zG.exe命令行压缩/7z文件夹。我的代码适用于文件,但不适用于文件夹。有人能告诉我使用7z命令行压缩文件夹的正确方法吗?以下是仅适用于文件的示例代码。每当我尝试运行这个代码时,7zip就会显示一个消息框,上面写着“无效参数” 请尝试使用以下命令: 7za -tzip <archive-name> <folder-name> 7za-tzip 如注释部分所述,您应该使用7za.exe 这为您提供了一个完整的示例行 您的代码如下所示: string s

我正在尝试使用7zG.exe命令行压缩/7z文件夹。我的代码适用于文件,但不适用于文件夹。有人能告诉我使用7z命令行压缩文件夹的正确方法吗?以下是仅适用于文件的示例代码。每当我尝试运行这个代码时,7zip就会显示一个消息框,上面写着“无效参数”

请尝试使用以下命令:

7za  -tzip <archive-name> <folder-name>
7za-tzip

如注释部分所述,您应该使用
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个拉链的包裹。7-Zip文件管理器也使用7z.dll

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


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

为什么要使用
7zG
?您不应该使用命令行版本吗?
-tgzip
不支持文件夹,请改用
-t7z
(即7zip格式)或其他格式(例如,-tzip)…或在路径末尾添加一个asterix,如下所述。7zG和7za之间有什么区别?
7zG.exe
是7zip的GUI模块,而
7z.exe
是命令行版本。
7za.exe
是独立版本的
7z.exe
(基本上它不依赖于任何dll,如
7z.dll
)Hi DigeMail,这是一个非常好的解决方案。你还知道,这项工作是如何通过<代码> 7Z.DLL>代码>而不是<代码> 7Z.exe < /C> >?@ BasTieBeln:是的,你可以,但是7Z.DLL是一个非托管DLL(用C++编写的),你需要为它创建一个包装器。有一些示例和已经编写的库(例如),但是如果您查看下载包,应该有一个.cs文件在C#中实现7z压缩的算法…Hi@dimEmAll,所以sda-我只能找到一个压缩一个流的函数-不能从一堆文件中构建存档。@BastianEbeling:你看过这个吗?
p.Arguments = "a -t7z \"" + targetName + "\" \"" + sourceName + "\" -mx=9";