C#-进程缓冲区的输入

C#-进程缓冲区的输入,c#,input,process,buffer,streamwriter,C#,Input,Process,Buffer,Streamwriter,我有一个非常简单的C程序的.exe文件(只有I/O是printf/scanfs)。(在最终项目中,C代码可以是任何C代码,因此不设置输入的数量/顺序/类型) 现在我想通过一个C代码来执行它,为scanfs预定义输入。 我使用了以下代码(基于MSDN中的示例): (我还试着用换行符写一个字符串——没有用) 问题在于,当进程不希望输入时(在到达下一个scanf之前),它会忽略写入它的输入。 尽管如此,如果写入线之间有一些延迟,它似乎工作正常 因此,我的问题是——是否有任何替代方案可以填充流程的输入缓

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

现在我想通过一个C代码来执行它,为
scanf
s预定义输入。 我使用了以下代码(基于MSDN中的示例):

(我还试着用换行符写一个字符串——没有用)

问题在于,当进程不希望输入时(在到达下一个scanf之前),它会忽略写入它的输入。 尽管如此,如果写入线之间有一些延迟,它似乎工作正常

因此,我的问题是——是否有任何替代方案可以填充流程的输入缓冲区,而不是在流程期望输入时为其提供输入? 或者简单地说,任何使进程接收所有输入的操作,在写入它们之间没有设置任何延迟(最好是从单个字符串,例如,
“3\n3\n1\n1\n1\n1\n1\n1\n1\n”

当流程需要键盘输入时(例如,
getch
),StreamWriter似乎不起作用。是否有任何方法也支持键盘输入? 例如,如果我有两个
scanf
s和一个
getch
,我希望将此字符串转换为输入:
“1\n a 2\n”
(不需要空格)


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

这与C有什么关系?哦,你是对的,它不是。。。只是进程是一个C程序如果程序使用非标准的getch(),那么你就完蛋了。破解SendInput()没有什么乐趣。哈哈,好吧,所以一个标准输入的解决方案就足够了。请阅读-总结是,这不是一个解决志愿者问题的理想方法,可能会对获得答案产生反作用。请不要将此添加到您的问题中。
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();