我正在尝试使用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 \“\”\“\”\“
如果我使用逐字字符串,我无法创建它以创建我想要的字符串。
任何想法? 感谢。
答案 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"
请记住,两个引号会生成单引号,因此字符串开头和结尾的三重引号是启动字符串定义的引号,然后是引用引号的双引号。可能是其中一种比较混乱的字符串格式,但这就是它的工作原理。