我正在编写一个带有2个参数的C#控制台应用程序:myprogram.exe param1 param2
param2
是可选的,其想法是,如果不存在,请获取管道数据:
echo "hithere" | myprogram.exe param1
我通过仅传递1个参数时捕获
Console.In.ReadToEnd()
来使此部分正常工作。我面临的问题是仅传递1个参数且没有数据通过管道传递时,它只是坐在那里聆听用户输入,而关闭的唯一方法是使用
Ctrl+C
结束程序。相反,如果仅提供了1个参数并且没有管道传输数据,是否有办法返回错误并退出程序?
为了测试是否有任何等待,我尝试使用:
Console.OpenStandardInput().CanRead
Console.OpenStandardInput().Length
Console.In.Peek()
那没用。
我还尝试了这个stackoverflow问题底部提到的“hack”:C# Console receive input with pipe。
有任何想法吗?
最佳答案
而不是检查控制台,而是检查命令行。如果它们传递了足够的参数,则假定没有任何可从控制台获得的参数。如果他们没有指定足够的参数,则假定URL将来自控制台。您无需使用ReadToEnd()
,而只需使用ReadLine()
即可逐行进行操作。如果使用ReadToEnd()
,则必须按CTRL + Z(或Linux中的CTRL + D)以指示输入流的结尾。
关于C#-如果没有数据管道传递给Program,则Console.In.ReadToEnd()会在用户输入上挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4419592/