C#命令行解析引用路径和避免转义字符

Jam*_*mes 23 c# command-line escaping

如何解析要解释为路径的命令行参数?args []包含在引用时自动连接的字符串,例如:

example.exe一二"三四"

args[0] = one
args[1] = two
args[2] = three four
Run Code Online (Sandbox Code Playgroud)

但是,args []不会将属性解析为"C:\ Example \"作为参数.相反,它将提供参数为"C:\ Example""(包含额外的引用.)这是由于路径中的反斜杠被视为转义字符,因此用户在命令上提供的结束引用-line成为论证的一部分.

.例如:

example.exe一个"C:\ InputFolder""C:\ OutuptFolder \"

args[0] = one
args[1] = C:\InputFolder"
args[2] = C:\OutputFolder"
Run Code Online (Sandbox Code Playgroud)

一个简单的kludge可能是:

_path = args[i].Replace("\"", @"\");
Run Code Online (Sandbox Code Playgroud)

但是,我确信这是最好的做法.如何正确解析一个包含路径的命令行,防止args []数组被不正确地填充已被解析为转义字符的stings?

注意:我不想在我的项目中包含整个命令行解析库!我只需要处理引用的路径,并希望以"手动"的方式这样做.请不要推荐NConsoler,Mono或任何其他大型"厨房水槽"命令行解析库.

另请注意:据我所知,这不是一个重复的问题.虽然其他问题集中在通用命令行解析上,但这个问题特定于当路径的一部分被解释为转义序列时路径引入的问题.

ewb*_*wbi 9

不是答案,但这里有一些背景和解释来自微软在线社区支持Jeffrey Tan(12/7/2006):

注意:这不是代码失败,而是设计,因为backslashe通常用于逃避某些特殊字符.此外,此算法与解析函数CommandLineToArgvW的Win32命令行参数相同.请参阅下面的备注部分:http: //msdn2.microsoft.com/en-us/library/bb776391.aspx

还可以参考FX方法Environment.GetCommandLineArgs以进一步解释斜杠处理行为.

我个人认为这是一个拖累,我很惊讶我之前没有被它咬过.或许我有,也不知道吗?但是,使用斜杠盲目替换引号并不能解决我的问题.我正在表达这个问题,因为这让人大开眼界.