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

C#在带有空格的目录周围使用双引号格式化字符串,c#,process,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\DummyGameConten

我正在尝试使用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\Shaders\Clear.mxfb”

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

代码为(其中最后两个参数为String.Empty):

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

如果我使用逐字记录字符串,我无法让它创建我想要的字符串

有什么想法吗?
谢谢。

更新

您应该使用
String.Concat()


更新

您应该使用
String.Concat()


您需要使用@literal的组合来避免'\'扭曲,使用'''s来生成''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"
String command = String.Join(" ",
    Path.GetFullPath(fxFile).Quotify(),
    Path.GetFullPath(outputFile).Quotify(),
    DX11Support.Quotify(), DebugSupport.Quotify());

请记住,两个引号构成一个单引号,因此字符串开头和结尾的三个引号是开始字符串定义的引号,然后是一个双引号。可能是其中一种更容易混淆的字符串格式,但这就是它的工作原理。

您需要使用@literal的组合来避免“\”蠕动和“'s to make”

这个例子对我很有用:

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"
String command = String.Join(" ",
    Path.GetFullPath(fxFile).Quotify(),
    Path.GetFullPath(outputFile).Quotify(),
    DX11Support.Quotify(), DebugSupport.Quotify());

请记住,两个引号构成一个单引号,因此字符串开头和结尾的三个引号是用于开始字符串定义的引号,然后是用于生成引号的双引号。可能是其中一种更容易混淆的字符串格式,但它就是这样工作的。

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

public static class StringExtensions
{
    public static string Quotify(this string s)
    {
        return string.Format("\"{0}\"", s);
    }
}
然后,您的命令格式如下所示:

"C:\Test Dir\file.fx" "C:\Test Dir\SubDir\input.dat"
String command = String.Join(" ",
    Path.GetFullPath(fxFile).Quotify(),
    Path.GetFullPath(outputFile).Quotify(),
    DX11Support.Quotify(), DebugSupport.Quotify());

对于这样一个简单的例子,我认为没有必要,但是您可以创建一个扩展方法来自动在字符串周围加引号

public static class StringExtensions
{
    public static string Quotify(this string s)
    {
        return string.Format("\"{0}\"", s);
    }
}
然后,您的命令格式如下所示:

"C:\Test Dir\file.fx" "C:\Test Dir\SubDir\input.dat"
String command = String.Join(" ",
    Path.GetFullPath(fxFile).Quotify(),
    Path.GetFullPath(outputFile).Quotify(),
    DX11Support.Quotify(), DebugSupport.Quotify());

是否有任何特定的原因让它转换?我相信您需要在字符串前面加上“@”以避免出现错误。如果我使用string.Format(@“\“{0}\”…),它会认为我是在说我想要字符串\然后我用一些无效的语法{0}\跟随它,然后在下一个字符串后面加上一个新字符串“使用伪值进行测试,但格式字符串按预期工作。是否有任何特定原因需要转换?我相信您需要在字符串前面加上“@”以避免出现错误。如果我使用string.Format(@“\“{0}\”…),它会认为我是在说我想要字符串\然后我用一些无效的语法{0}\跟随它,然后在下一个字符串后面加上一个新字符串“使用伪值测试,但您的格式字符串按预期工作。很抱歉,上面可能不清楚,但它是两个字符串,我需要输出为“PathOne”“PathTwo”,因为这似乎给了我PathOne\\PathTwo非常好,感谢您使用string命令=string.Concat(\”,Path.GetFullPath(fxFile),“\”,“\”,Path.GetFullPath(outputFile),”\“”+DX11支持+“”+DebugSupport);抱歉,上面可能不清楚,但它是两个字符串,我需要输出为“PathOne”“PathTwo”,因为这似乎给了我PathOne\\PathTwo非常好的效果,感谢您使用String命令=String.Concat(“\”,Path.GetFullPath(fxFile),“\”,“\”,Path.GetFullPath(outputFile),“\”+DX11Support+“+DebugSupport);谢谢,但是文件是一个动态的文件列表,所以我不能硬编码列表。这就是为什么我试图让String.Format工作,这样我可以更容易地构建命令行参数。谢谢,但是这些文件是一个动态的文件列表,所以我不能硬编码列表。这就是为什么我试图让String.Format正常工作,这样我可以更容易地构建命令行args。好吧,但这意味着原始字符串应按预期工作。好吧,但这意味着原始字符串应按预期工作。