C#格式带有空格的目录周围带双引号的字符串

时间:2012-10-25 12:42:48

标签: c# process

我正在尝试使用String.Format来创建以下字符串

2MSFX.exe“C:\ Users \ Avidan \ Documents \ Visual Studio 2010 \ Projects \ DefferedRenderer \ DummyGame \ DummyGameContent \ Shaders \ Clear.fx”“C:\ Users \ Avidan \ Documents \ Visual Studio 2010 \ Projects \ DefferedRenderer \ DummyGame \ DummyGameContent \着色\ Clear.mxfb“

所以我正在尝试使用String.Format,但由于某些原因我无法理解:#

代码是(其中最后2个参数是String.Empty):

 String outputFile = Path.Combine(destDir, Path.ChangeExtension(Path.GetFileName(fxFile), "mgxf"));
 String command = String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\"",  Path.GetFullPath(fxFile),  Path.GetFullPath(outputFile), DX11Support, DebugSupport);

                var proc = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = MGFXApp,
                        Arguments = command,
                        UseShellExecute = false,
                        RedirectStandardOutput = true,
                        CreateNoWindow = true
                    }
                };

但这似乎给了我 \“C:\ Users \ Avidan \ Documents \ Visual Studio 2010 \ Projects \ DefferedRenderer \ DummyGame \ DummyGameContent \ Shaders \ ClearGBuffer.fx \”\“C:\ Users \ Avidan \ Documents \ Visual Studio 2010 \ Projects \ DefferedRenderer \ DummyGame \ DummyGameContent \ Shaders \ MGFX \ ClearGBuffer.mgxf \“\”\“\”\“

如果我使用逐字字符串,我无法创建它以创建我想要的字符串。

任何想法? 感谢。

3 个答案:

答案 0 :(得分:3)

<强>更新

您应该使用String.Concat()

String.Concat("\"", Path.GetFullPath(fxFile), "\" " , Path.GetFullPath(outputFile), "\" " DX11Support,"\" " ,DebugSupport, "\"")

答案 1 :(得分:2)

对于像这样的简单情况,我认为没必要,但你可以创建一个扩展方法来自动在字符串周围加上引号。

public static class StringExtensions
{
    public static string Quotify(this string s)
    {
        return string.Format("\"{0}\"", s);
    }
}

然后你的命令格式如下:

String command = String.Join(" ",
    Path.GetFullPath(fxFile).Quotify(),
    Path.GetFullPath(outputFile).Quotify(),
    DX11Support.Quotify(), DebugSupport.Quotify());

答案 2 :(得分:0)

你需要使用@ literal的组合来避免'\'squirlyness,并使用'\ n'来制作“s”

此示例适用于我:

string s = @"""C:\Test Dir\file.fx"" ""C:\Test Dir\SubDir\input.dat""";
Console.WriteLine(s);

控制台输出如下所示:

"C:\Test Dir\file.fx" "C:\Test Dir\SubDir\input.dat"

请记住,两个引号会生成单引号,因此字符串开头和结尾的三重引号是启动字符串定义的引号,然后是引用引号的双引号。可能是其中一种比较混乱的字符串格式,但这就是它的工作原理。