StackOverflow一直被证明是我编程知识的最佳来源!这是因为你,因为你渴望给予像我这样挣扎的家伙最好的答案和帮助。谢谢!
像往常一样,我对该主题进行了几个小时的研究,似乎我面临的问题有点具体(可能这就是为什么我找不到解决方案并且问这个问题现在)。 Here和here我找到了最接近且与我的问题最相关的解决方案,但还不够。 我需要做的是启动一个控制台应用程序(用C编写的.exe)。期望任何给定的参数到达此处:int main(int argc,char ** argv) - >像往常一样在argv。其中一个args包括空格。我测试并发现,用双引号包装这个arg中的字符串解决了空格问题。在VS2010中进行调试时,我将Command Arguments设置为:first second“third fourth”,我得到三个参数:argv [0] = first,argv 1 = second,argv 2 = third第四个(引号),这正是我需要的。但是,当我尝试做这样的事情时:
procInfo = new System.Diagnostics.ProcessStartInfo();
procInfo.FileName = "myProg.exe";
procInfo.Arguments = "first second \"third fourth\"";
当调试时,我看到,procInfo.Arguments =第一个第二个\“第三个第四个”,而我需要它是第一个第二个“第三个第四个”。所有这一切的坏处是,这就是那些args到达myProg.exe的方式:第一个第二个“第三个第四个”。在Visual Studio中调试myProg并将Command Arguments设置为第一个第二个“第三个第四个”时,则
argv [0] =第一,
argv 1 =秒,
argv 2 =“第三个(是的,在开头用双引号) 我需要argv 2 =第三名,而不是“第三名
和argv [3]应该是(null)。
问题是procInfo.Arguments =“第一秒”第三个第四个\“”,而我需要它是procInfo.Arguments =“第一个第二个”第三个第四个“”;在JavaScript中,我可以编写诸如“第一秒”第三个“第四个”之类的字符串。我希望在C#中有类似的事情(或许有,我不知道)。在代码中,我尝试了procInfo.Arguments = @“第一秒”“第三个第四”“”,但这转换为:第一个第二个\“第三个第四个”(我不认为这是它应该工作的方式,但你可以告诉我,我是对的,不是。)
myProc.Arguments = $“第一秒......”;给我的是:“意外的角色'$'”
再次,在调试时,当我将Command Arguments设置为第一个第二个“第三个第四”时,我将它们作为第一个;第二;第三名;没有任何引号,这样myProg就像一个魅力。所以这就是我希望args看起来的样子。
提前感谢您的帮助!
编辑:我甚至尝试过:
procInfo.Arguments = "first second ";
procInfo.Arguments += '"';
procInfo.Arguments += "third fourth";
procInfo.Arguments += '"';
但我得到的结果相同。
EDIT2 :用代码编写时:
procInfo.Arguments = "first second \'third fourth\' fifth";
调试时(将鼠标悬停在procInfo.Arguments上)我将其视为“第一秒”第三个第四个“第五个”,而使用双引号时,我将其视为“第一秒”第三个第四个“第五个”,而我期望它显示为“第一秒”第三个第四个“第五个”与单引号一样。我知道,外引号只是来自调试器,不会发送到myProg.exe。问题是,单引号不能解决问题,这正如预期的那样。
EDIT3 :我刚试过:procInfo.Arguments =“first second \ x22third fourth \ x22”和procInfo.Arguments =“first second \ u0022third fourth \ u0022”,但结果又来了“第一秒”第三个第四个\“”