【问题标题】:How to read from stdin each byte and process them in c#如何从标准输入读取每个字节并在 C# 中处理它们
【发布时间】:2013-10-02 16:29:59
【问题描述】:

我在从另一个应用程序读取每个字节到 c# 中的 stdin 时遇到问题。

代码很简单:

Stream instrm=Console.OpenStandardInput();
while(true){
   int b=instrm.ReadByte();
   Environment.Exit(1);
}

我认为它应该如何工作: 当 instrm 将是一个字节 - 应用程序将关闭。但是当我向应用程序发送字节时,什么也没有发生。 我做错了,还是什么?任何线索...

【问题讨论】:

  • 您的问题是“来自另一个应用程序的 c# 中的标准输入”,但代码显示重新打开您自己的标准输入...哪个是正确的?
  • 我有两个应用程序,一个使用标准输入向另一个应用程序发送字节。上面的代码是接收器的示例(用 c# 编写)我的猜测是打开 stdin 流并监听它的数据
  • 该代码对我来说看起来不错(我也从未尝试过)...Console.ReadXXXX 应该足以阅读(我个人不会尝试以这种方式阅读非文本)...但是请显示发件人的代码,因为您可能没有真正发送任何东西。

标签: c# byte stdin


【解决方案1】:

试试这个:

        static void Main(string[] args) {
            while(true) {
               var k = Console.ReadKey();
               Environment.Exit(1);
               }
            }

C# 是基于 Unicode 的,虽然流通常采用 UTF-8 编码,但您仍然不想养成读取字节的习惯。此外,其他控制台读取方法在输入换行符之前不会获取任何数据(以防您要备份)。

我想知道你真正想要使用的是管道吗?

【讨论】:

  • 当我使用管道时,也没有发生任何事情......也许我做错了......逻辑是一样的 - 创建anonymousPipeServerStream并开始从该服务器读取字节(真)跨度>
  • 重试管道,如 MSDN 示例中所示。它开始工作! =) 谢谢
【解决方案2】:

我还有另一种解决方案: 使用 .net 3.5 或更低版本编译项目,在这种情况下,一切都会按预期开始。

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多