0

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

我测试了我要给出的命令行参数,它可以工作,但我无法从 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选项(我用于覆盖) - 删除它后,它起作用了。

4

3 回答 3

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);
于 2012-07-19T19:40:58.023 回答
0

7za.exe是命令行程序,你应该在这种情况下使用它。

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

另外,确保你把你"的东西放在周围,最后不要用两个垫子,这只会导致问题。

于 2012-07-19T19:32:47.030 回答
0

如果命令行工作,也许只是使用不同的启动功能;带exe路径的那个,第二个参数中的命令行参数。

看这里

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

于 2012-07-19T19:43:23.720 回答