C# - 输入缓冲区

时间:2017-06-16 19:33:49

标签: c# input process buffer streamwriter

我有一个非常简单的C程序的.exe文件(只有I / O是printf / scanf s)。 (在最终项目中,C代码可以是任何 C代码,因此未设置数量/顺序/输入类型。

现在我想通过C#代码执行它,其中包含scanf的预定义输入。 我使用了这段代码(基于MSDN的例子):

Process myProcess = new Process();

myProcess.StartInfo.FileName = "File.exe";
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;

myProcess.Start();

StreamWriter myStreamWriter = myProcess.StandardInput;

myStreamWriter.WriteLine("3");
myStreamWriter.WriteLine("3");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");
myStreamWriter.WriteLine("1");

myStreamWriter.Dispose();

myProcess.WaitForExit();
myProcess.Dispose();

(我也尝试用换行符写一个字符串 - 不起作用)

问题是该过程只是忽略了在不期望它们时(在到达下一个scanf之前)写入的输入。 但是,如果WriteLine之间有一些延迟,它似乎确实有效。

所以我的问题是 - 是否有任何一种替代方法可以填充进程的输入缓冲区,而不是在期望它时给它输入? 或者简单地说,任何会使进程接收所有输入的东西,在写入之间没有任何延迟(最好是从单个字符串,例如"3\n3\n1\n1\n1\n1\n1\n1\n1\n1\n1\n")?

P.S。当进程期待键盘输入(例如StreamWriter)时,getch似乎不起作用。有没有任何方法可以支持键盘输入? 例如,如果我之间有两个scanf和一个getch,我希望将此字符串转换为输入:"1\n a 2\n"(不需要空格)

编辑:我可以操纵C代码,因此我可以将getch转换为getchar等等。

0 个答案:

没有答案