1

我需要从 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

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

4

2 回答 2

6

这就是命令行将参数传递给 C# 程序的方式。你无法改变这一点。但是,您可以访问整个命令参数字符串并自己执行验证。

MSDN:Environment.CommandLine 属性

于 2012-06-20T11:15:04.453 回答
0

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

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

于 2012-06-20T11:10:07.963 回答