string path = @"C:\Users\<user>\Documents\Visual Studio\Projects\7ZipFile\RequiredDocs\";
ProcessStartInfo zipper = new ProcessStartInfo(@"C:\Program Files\7-Zip\7z.exe");
zipper.Arguments = string.Format("a -t7z {0}.7z {0} *.txt -mx9", path);
zipper.RedirectStandardInput = true;
zipper.UseShellExecute = false;
zipper.CreateNoWindow = true;
zipper.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(zipper);
目标:将所有* .txt文件邮寄到&#34;路径&#34;并将该压缩文件保存在&#34; path&#34;并且这些.txt文件不应出现在&#34;路径&#34;拉链后
当我运行代码时,似乎没有任何事情发生(0错误)......
请帮忙!
谢谢
更新:我正在使用7Zip并在Windows上安装了7Zip应用程序,此代码将用于.NET 3.5。
答案 0 :(得分:4)
从程序中使用7Zip的正常方法是调用7za.exe(不是已安装的7z程序)并在应用程序中包含7za。
This页面有一个很好的教程如何使用它。每次我需要以编程方式压缩/ 7zip时效果很好。
如果您希望以纯.NET方式使用普通的zip功能(需要.NET 4.5),也可以使用ZipArchive类
此外,如果有空格,您的路径应该在引号中。请注意,引号使用'\'进行转义。 “”也是C#中引用的有效转义序列:
string.Format("a -t7z \"{0}.7z\" \"{0}\" *.txt -mx9", path);
答案 1 :(得分:1)
以下是我的申请中的一个例子。此示例提取存档,但它向您显示如何设置该过程。只需将命令更改为7z和参数即可。此示例假定您随应用程序一起发送7za.exe。祝你好运。
public static bool ExtractArchive(string f) {
string tempDir = Environment.ExpandEnvironmentVariables(Configuration.ConfigParam("TEMP_DIR"));
if (zipToolPath == null) return false;
// Let them know what we're doing.
Console.WriteLine("Unpacking '" + System.IO.Path.GetFileName(f) + "' to temp directory.");
LogFile.LogDebug("Unpacking '" + System.IO.Path.GetFileName(f) + "' to temp directory '" + tempDir + "'.",
System.IO.Path.GetFileName(f));
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
if (pid == PlatformID.Win32NT || pid == PlatformID.Win32S || pid == PlatformID.Win32Windows || pid == PlatformID.WinCE) {
p.StartInfo.FileName = "\"" + Path.Combine(zipToolPath, zipToolName) + "\"";
p.StartInfo.Arguments = " e " + "-y -o" + tempDir + " \"" + f + "\"";
} else {
p.StartInfo.FileName = Path.Combine(zipToolPath, zipToolName);
p.StartInfo.Arguments = " e " + "-y -o" + tempDir + " " + f;
}
try {
p.Start();
} catch (Exception e) {
Console.WriteLine("Failed to extract the archive '" + f + "'.");
LogFile.LogError("Exception occurred while attempting to list files in the archive.");
LogFile.LogExceptionAndExit(e);
}
string o = p.StandardOutput.ReadToEnd();
p.WaitForExit();
string[] ls = o.Split('\n');
for (int i = 0; i < ls.Count(); i++) {
string l = ls[i].TrimEnd('\r');
if (l.StartsWith("Error")) {
LogFile.LogError("7za: Error '" + ls[i + 1] + "'.", f);
Console.WriteLine("Failed to extract the archive '" + f + "'.");
return false;
}
}
return true;
}