C#控制台:如何从命令行读取管道输入

3

我有点困惑。我一直在查看先前回答这个问题的答案,但是没有一个实际上适用于我,所以我不确定我做错了什么。

我有一个简单的C#控制台应用程序:(outputsomething.exe)

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

另一个需要使用上述代码的参数和管道输入的例子如下: 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上)

谢谢您提供帮助!

2个回答

2

我尝试了下面的示例代码,对我有效。

WriteText

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

处理输入

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

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

        }
    }

我使用WriteText.exe | ProcessInput.exe调用了该应用程序,它显示了由WriteText.exe传递的完全相同的输出字符串。
如果这有所帮助,请告诉我。

0
如果你想将 outputsomething.exe 的输出导入到 dostuffwithinput.exe,应该使用以下命令:
outputsomething.exe|dostuffwithinput.exe some args

@push22,你的代码对我来说很好用,如果将Console.KeyAvailable注释掉,因为如果输入被重定向,Console.KeyAvailable会抛出异常。 - user4003407

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接