文件路径中的空格问题 - C#中的命令行执行

时间:2010-11-15 15:04:26

标签: c# command-line filepath

我正在为命令行程序构建一个gui。 在txtBoxUrls [TextBox]中,逐行输入文件路径。 如果文件路径包含空格,则程序无法正常运行。 该计划如下。

string[] urls = txtBoxUrls.Text.ToString().Split(new char[] { '\n', '\r' });

string s1;
string text;
foreach (string s in urls)
{
    if (s.Contains(" "))
    {
        s1 = @"""" + s + @"""";
        text += s1 + " ";
    }
    else
    {
        text += s + " ";
    }
}


System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.CreateNoWindow = true;


proc.StartInfo.FileName = @"wk.exe";


proc.StartInfo.Arguments = text + " " + txtFileName.Text;

proc.StartInfo.UseShellExecute = false;


proc.StartInfo.RedirectStandardOutput = true;


proc.Start();

//Get program output
string strOutput = proc.StandardOutput.ReadToEnd();

//Wait for process to finish
proc.WaitForExit();

例如,如果在txtBoxUrls中输入的文件路径是“C:\ VS2008 \ Projects \ web2pdf \ web2pdf \ bin \ Release \ Test Page.htm”,则该程序将无法运行。这个带双引号的文件路径可以很好地在windows命令行(我没有使用GUI)中工作。 什么是解决方案。

3 个答案:

答案 0 :(得分:10)

proc.StartInfo.Arguments = text + " " + txtBoxUrls.Text + " " + txtFileName.Text; 

在这一行中,text已包含txtBoxUrls字符串的正确引用版本。为什么要以不带引号的形式(+ txtBoxUrls.Text)再次添加它们?如果我理解了您的代码,则以下内容应该有效:

proc.StartInfo.Arguments = text + " " + txtFileName.Text;    

事实上,由于txtFileName.Text可能包含空格,因此您应该引用它,以确保:

proc.StartInfo.Arguments = text + " \"" + txtFileName.Text + "\"";    

(或者,使用您的语法:)

proc.StartInfo.Arguments = text + @" """ + txtFileName.Text + @"""";    

答案 1 :(得分:2)

通常要绕过文件名中的空格,你需要用双引号包装你的参数。如果省略引号,程序会认为它有两个参数。像这样......

wk.exe "C:\VS2008\Projects\web2pdf\web2pdf\bin\Release\Test Page.htm"

此外,此行似乎有太多引号。四,而不是三:

s1 = @"""" + s + @"""";

答案 2 :(得分:0)

查看Path类 - http://msdn.microsoft.com/en-us/library/system.io.path.aspx

Path.combine可能正是您所寻找的。