我有一个非常简单的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
等等。