我正在编写一个带有2个参数的C#控制台应用程序:myprogram.exe param1 param2param2是可选的,其想法是,如果不存在,请获取管道数据:

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/

    10-11 02:52
    查看更多