我需要从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
该程序将完全忽略双引号,这不是用户期望的内容。我想检测这些情况,并告知用户不匹配/未转义的报价,否则他们可能会得到错误字符串的加密版本。
答案 0 :(得分:6)
命令行将参数传递给C#程序。你不能改变它。但是,您可以作为一个整体访问命令参数字符串并自行执行验证。
答案 1 :(得分:0)
只需手动执行:检查-encrypt
参数后只有一个参数,如果没有,则下一个参数以双引号开头,最后一个参数以双引号结束。如果这些都不发生,则向用户抛出自定义错误。
当-encrypt
之后的下一个参数以双引号开头且最后一个参数以双引号结尾时,使用Array.Copy
或类似的东西自行构建字符串。