我有点困惑。我一直在寻找上述问题的先前答案,其中没有一个实际上对我有用,所以我不确定我做错了什么。
我有一个简单的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
答案 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