C#+ 7z.exe似乎不起作用

时间:2014-03-07 17:40:37

标签: c# 7zip

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。

2 个答案:

答案 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;
    }