我有点困惑。我一直在查看先前回答这个问题的答案,但是没有一个实际上适用于我,所以我不确定我做错了什么。
我有一个简单的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上)
谢谢您提供帮助!
Console.KeyAvailable
注释掉,因为如果输入被重定向,Console.KeyAvailable
会抛出异常。 - user4003407