使用C#访问命令行

时间:2012-06-20 11:06:43

标签: c# command-line

我需要从C#应用程序中访问命令行。如果我使用“args”参数,我找不到检测不匹配的双引号的方法。

我正在处理的应用程序可以选择加密通过命令行传递给它的字符串。

例如。

program.exe -encrypt somestring

结果:

EZs/6rWxvJ82+VE8unJ0Xw==

现在,如果用户输入:

program.exe -encrypt somestring extra characters

它会忽略“somestring”之后的所有内容(您仍然可以通过“args”参数访问其余值。)

您可以使用双引号轻松解决此问题:

program.exe -encrypt "somestring extra characters"

当然,如果您想使用嵌入式引号,可以使用“\”转义它们:

program.exe -encrypt "somestring \"extra\" characters"

当用户输入以下内容时会出现问题:

program.exe -encrypt "somestring extra characters

或:

program.exe -encrypt somestring ex"tra characters

该程序将完全忽略双引号,这不是用户期望的内容。我想检测这些情况,并告知用户不匹配/未转义的报价,否则他们可能会得到错误字符串的加密版本。

2 个答案:

答案 0 :(得分:6)

命令行将参数传递给C#程序。你不能改变它。但是,您可以作为一个整体访问命令参数字符串并自行执行验证。

MSDN: Environment.CommandLine Property

答案 1 :(得分:0)

只需手动执行:检查-encrypt参数后只有一个参数,如果没有,则下一个参数以双引号开头,最后一个参数以双引号结束。如果这些都不发生,则向用户抛出自定义错误。

-encrypt之后的下一个参数以双引号开头且最后一个参数以双引号结尾时,使用Array.Copy或类似的东西自行构建字符串。