当前位置:  开发笔记 > 编程语言 > 正文

C#Console通过管道接收输入

如何解决《C#Console通过管道接收输入》经验,为你挑选了4个好方法。

我知道如何使用参数编程控制台应用程序,例如:myProgram.exe param1 param2.

我的问题是,如何使我的程序与|,例如:echo"word"| myProgram.exe?



1> Matthew Scha..:

您需要使用Console.Read()并且Console.ReadLine()好像您正在阅读用户输入.管道透明地替换用户输入.你不能轻易地使用它们(虽然我确信它很可能......).

编辑:

一个简单的cat风格程序:

class Program
{
    static void Main(string[] args)
    {
        string s;
        while ((s = Console.ReadLine()) != null)
        {
            Console.WriteLine(s);
        }

    }
}

当运行时,如预期的那样,输出:

C:\...\ConsoleApplication1\bin\Debug>echo "Foo bar baz" | ConsoleApplication1.exe
"Foo bar baz"

C:\...\ConsoleApplication1\bin\Debug>


是.使用较低级别的类比,管道真正发生的是第一个应用程序的Stdout流被插入到管道中下一个应用程序的Stdin流中.控制台的stdin通过第一个应用程序,显示最后一个应用程序stdout.

2> CodeMiller..:

下面将不会暂停输入的应用程序和数据时工作没有管道.有点黑客; 并且由于错误捕获,当进行了大量的管道调用时性能可能会很差但很容易.

public static void Main(String[] args)
{

    String pipedText = "";
    bool isKeyAvailable;

    try
    {
        isKeyAvailable = System.Console.KeyAvailable;
    }
    catch (InvalidOperationException expected)
    {
        pipedText = System.Console.In.ReadToEnd();
    }

    //do something with pipedText or the args
}



3> gordy..:

在.NET 4.5中它是

if (Console.IsInputRedirected)
{
    using(stream s = Console.OpenStandardInput())
    {
        ...



4> matt burns..:

这是这样做的方法:

static void Main(string[] args)
{
    Console.SetIn(new StreamReader(Console.OpenStandardInput(8192))); // This will allow input >256 chars
    while (Console.In.Peek() != -1)
    {
        string input = Console.In.ReadLine();
        Console.WriteLine("Data read was " + input);
    }
}

这允许两种使用方法.从标准输入读取:

C:\test>myProgram.exe
hello
Data read was hello

或从管道输入读取:

C:\test>echo hello | myProgram.exe
Data read was hello

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有