将文件路径传递到Main(string[]args)不起作用

本文关键字:string args 不起作用 Main 路径 文件 | 更新日期: 2023-09-27 18:24:44

我正试图将文件路径传递到C# Console Application,但当字符串到达控制台应用程序时,出现了字符串不正确的问题。

如果我从命令行运行应用程序,并使用文件路径参数:

MyApp "C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject'"

弹出一个窗口对话框,通知我的应用程序已停止工作,当我单击Debug选项时,我可以看到args[0]的结果是:

C: ''Users''DevDave''Documents''Visual Studio 2012''Projects''MyProject"

请注意,末尾仍然有一个尾随引号。

如果我通过第二个论点:

MyApp "C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject'" "any old string"

我再次遇到错误,在调试中查看后,我看到args[0]是:

C: ''Users''DevDave''Documents''Visual Studio 2012''Projects''MyProject"任何

我对为什么会发生这种事感到困惑。我唯一的猜测是字符串中的反斜杠导致了字符串中的某种转义序列编辑:我注意到上面的字符串示例中也发生了同样的情况!似乎"在这里引起了问题。

我只想传入当前解决方案目录的文件路径,并使用$(SolutionDir)从预构建事件调用我的应用程序,并且知道我可以通过其他方式获得当前解决方案的路径。但这是最简单的,我很好奇为什么它没有按预期工作。

将文件路径传递到Main(string[]args)不起作用

是的,命令行参数的规则有点模糊。

'是转义符,您可以使用它来转义引号(")。您必须对反斜杠进行转义,但前提是它位于引号之前。因此使用(注意末尾的"''''"):

MyApp "C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject''" 

或者,更简单,但你必须以某种方式在C#中处理它:

MyApp "C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject" 

另请参阅此问题

这就是为什么在路径中使用/总是更好的原因

"C:/Users/DevDave/Documents/Visual Studio 2012/Projects/MyProject/" "any old string"

看看:http://en.wikipedia.org/wiki/Path_(计算),您可以在路径中同时使用'/,但如果您想要任何shell兼容性,我建议使用/

MyApp之后的任何内容都将是第一个参数(args[0])。在您的案例中,第一个参数是"C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject'"。此外,字符串末尾的引号似乎发生了,因为'"表示您希望转义引号并将其写成字符串。在这种情况下,引号并没有结束字符串。这就是您的args[0]是MyApp 之后的全部内容的原因

如果你不想在报价后面加斜线,你应该做''"

你可以试试这个,告诉我会发生什么:

MyApp "C:'Users'DevDave'Documents'Visual Studio 2012'Projects'MyProject''"

(看双斜线)

希望能有所帮助。

Henk答案的延续,并选择在路径的末尾添加一个',然后:

如果你选择在Henk的回答中选择这段代码来破解这个bug("更简单,但你必须以某种方式在C#中处理它:"),那么你应该意识到会发生一些bug:

  1. 即使传入了多个参数,也只会设置args[0]。args的长度将等于1。因此,您必须将args[0]拆分为多个部分进行破解。

  2. 如果任何"字符位于分割片段的末尾,则必须将其替换为'