我正在编写一个采用 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#——如果没有数据通过管道传输到程序,Console.In.ReadToEnd() 在用户输入时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419592/