c#console:如何从命令行读取管道输入

时间:2014-12-19 11:24:53

标签: c# windows

我有点困惑。我一直在寻找上述问题的先前答案,其中没有一个实际上对我有用,所以我不确定我做错了什么。

我有一个简单的c#console app:(outputsomething.exe)

static void Main(string[] args) {
    Console.Out.Write("This is a test");
}

另一个从上面的代码中获取一些args和管道输入,如下所示: dostuffwithinput.exe some args | outputsomething.exe

第一个问题是我无法弄清楚如何“读取”管道输入,正如我上面说的,现有的答案都不适合我,从stdin(Console.In)读取只是没有捕获任何东西。

其次,在我输入东西之后,我再也无法向stdout(Console.Out)写任何东西了。

我所拥有的代码非常简单,它只是将args写入文件,连同一些控制台属性,并尝试从Console.In中读取它 - 但它只读取我输入的输入。

但是使用管道输入时,它从未设法捕获管道内容,最后一个输出从未发送到控制台。

    static void Main(string[] args) {
        bool ior = Console.IsInputRedirected;
        bool keyavail = Console.KeyAvailable;

        char[] chrs = new char[4];
        int chr = Console.In.ReadBlock(chrs, 0, 4);

        using (StreamWriter stream = new StreamWriter("fred.txt")) {
            foreach (var arg in args) {
                stream.WriteLine(arg);
                Console.WriteLine(arg);
            }
            stream.WriteLine("input = " + new string(chrs));
            stream.WriteLine("io redirectirected = " + ior);
            stream.WriteLine("is key available = " + keyavail);
        }
        Console.WriteLine("fin");
        Console.Out.Flush();
    }

(我也遇到了严重的问题,这个堆垃圾编辑器一直显示有关缩进的红色警告显示我必须删除大量示例才能以可发送的形式获取它!)

我做错了什么? (这是在Windows 10/9879上)

TIA

2 个答案:

答案 0 :(得分:1)

尝试使用以下示例代码。它对我有用。

WRITETEXT

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test Line1");
            Console.WriteLine("test Line2");
        }
    }

ProcessInput

class Program
    {
        static void Main(string[] args)
        {
            string s=Console.In.ReadToEnd();

            Console.WriteLine("Redirected Text: " + s);

        }
    }

我使用WriteText.exe调用了应用程序ProcessInput.exe 它显示了WriteText.exe

完全传递的输出字符串

如果有帮助,请告诉我。

答案 1 :(得分:0)

如果您想从outputsomething.exe管道到dostuffwithinput.exe,那么它应该是

outputsomething.exe|dostuffwithinput.exe some args