我有点困惑。我一直在查看之前对上述问题的回答,但没有一个对我有用,所以我不确定我做错了什么。
我有一个简单的 C# 控制台应用程序:(outputsomething.exe)
static void Main(string[] args) {
Console.Out.Write("This is a test");
}
还有一个从上面的代码中获取一些参数和管道输入,如下所示: dostuffwithinput.exe 一些参数 |outputsomething.exe
第一个问题是我不知道如何“读取”管道输入,正如我在上面所说的那样,现有的答案都不适合我,从 stdin (Console.In) 读取只是无法捕获任何内容。
其次,在通过管道输入内容后,我无法再将任何内容写入标准输出 (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
最佳答案
对下面的示例代码进行了相同的尝试。它对我有用。
写文本
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 调用了应用 |进程输入程序 它显示了 WriteText.exe 准确传递的输出字符串
如果这有帮助,请告诉我。
关于C# 控制台 : how can i read piped input from the command line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565058/