gpt4 book ai didi

C#——如果没有数据通过管道传输到程序,Console.In.ReadToEnd() 在用户输入时挂起

转载 作者:太空狗 更新时间:2023-10-29 23:41:58 26 4
gpt4 key购买 nike

我正在编写一个采用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com