我想多次读取程序的输出。有些事情,如果我通过X我得到输出,我显示它,然后再次,如果我通过Y我得到输出,我显示它。没有重新启动过程。 尝试它我已经制作了一个c程序
#include<stdio.h>
int main()
{
int i;
int j;
while(scanf("%d", &i))
{
for(j = 0; j<=i;j++)
printf("%d\n",j);
}
return 0;
}
现在我正在用C#进行插入,当我在文本框中输入文本时,它会通过重定向standardinput(一个流写器)传递给程序并读取输出,我称之为标准输出(streamreader)。 ReadToEnd的()。
但它不适合我。因为它进入等待状态,直到流返回一些指示告诉结束已被读取。
我怎样才能实现这样的目标?
我尝试了异步读取,我调用了beginoutputread方法,但后来我不知道读取何时完成!一种方法是我可以在原始程序中添加一个标记,以指示当前输入的输出结束。我还有其他方法可以实现吗?
答案 0 :(得分:6)
如果流支持搜索(CanSeek
),您可以通过设置
stream.Position = 0;
因此开始重新阅读。
答案 1 :(得分:2)
如果流不支持搜索,但流中的数据不是那么大,您可以读取和写入该流到MemoryStream,并根据需要多次读取MemoryStream。
答案 2 :(得分:0)
Quck and Dirty:这个可以解决一些小问题。尝试改进它,因为我要离开办公室:)
ProcessStartInfo psi = new ProcessStartInfo(@"c:\temp\testC.exe");
psi.CreateNoWindow = true;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
string input = "";
ConsoleColor fc = Console.ForegroundColor;
StreamWriter sw = p.StandardInput;
StreamReader sr = p.StandardOutput;
char[] buffer = new char[1024];
int l = 0;
do
{
Console.Write("Enter input: ");
input = Console.ReadLine();
int i = Convert.ToInt32(input);
sw.Write(i);
sw.Write(sw.NewLine);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(">> ");
l = sr.Read(buffer, 0, buffer.Length);
for (int n = 0; n < l; n++)
Console.Write(buffer[n] + " ");
Console.WriteLine();
Console.ForegroundColor = fc;
} while (input != "10");
Console.WriteLine("Excution Finished. Press Enter to close.");
Console.ReadLine();
p.Close();
PS: - 我在vs2008中创建了控制台exe并将其复制到名为testC.exe的c:\ temp文件夹中。