c#create 7z archive,然后无法打开文件“name.7z”作为存档

时间:2012-07-19 19:27:48

标签: c# archive 7zip

我正在尝试压缩一些文件夹。它们有不同的路径,不属于同一目录。

我测试了我会给出的命令行参数,但是它有效,但是我无法通过c#来实现它:

string destination = "some path\\name.7z";
string pathToZip = "path to zip\\7z.exe";  // or 7za.exe
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = "a \"" + destination + "\" \"";
// room for the foreach - but even one directory doesn't work right now
   p.Arguments += directoryPath + "\" \"";
p.Arguments += "\" -mx=9 -aoa";
Process x = Process.Start(p);

使用7z.exe我会眨眼;使用7za.exe,我得到典型的命令行zip序列,文件压缩,添加到存档,并创建存档。

然后我转到它并右键单击,打开或双击......我发现它是一个无效的存档(Can not open file "name.7z" as an archive)。尝试使用7za命令行来提取 - 同样的事情。

编辑:我找到了解决方案:

我的问题是 -aoa 选项(我用于覆盖) - 删除后,它有效。

3 个答案:

答案 0 :(得分:1)

此代码适用于我,包含一个包含以下文件的目录:

string destination = @"c:\my test.7z";
string pathToZip = @"C:\Program Files\7-Zip\7z.exe";
string directoryPath = @"c:\my test";

ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = string.Format("a -mx=9 \"{0}\" \"{1}\"", destination, directoryPath);

Process x = Process.Start(p);

答案 1 :(得分:0)

7za.exe是命令行程序,您应该在此实例中使用它。

为什么要在命令行中添加""?这可能会导致您的问题。

另外,请确保将"放在周围的东西上,不要在最后填充其中两个,这只会导致问题。

答案 2 :(得分:0)

如果命令行有效,可能只使用不同的启动功能;获取exe的路径,以及第二个参数中的命令行参数。

Look here

如果命令行有效,这可能是最好的方法。