StreamReader读取dos命令行的输出流的问题
有如下代码(主要部分)
Process p=new Process();
p.StartInfo.FileName=@"c:\windows\system32\cmd.exe";
p.StartInfo.RedirectStandardError=true;
p.StartInfo.RedirectStandardInput=true;
p.StartInfo.RedirectStandardOutput=true;
p.StartInfo.UseShellExecute=false;
p.Start();
p.StandardInput.WriteLine("dir c:\\");
string str=p.StandardOutput.ReadToEnd();//问题所在
Console.WriteLine(str);
问题在于执行到p.StandardOutput.ReadToEnd();时候就一直阻塞,调试发现的确读完了命令行输出数据,但可能是缺少流结束符所以无法结束Read;如果使用StandardOutput.ReadLine()无法知道读到哪行才读完本次的输出数据。问有什么方法可以既读完dir c:\\的输出,又能使ReadToEnd();及时返回?
[解决办法]
if (p.HasExited) { //从输出流获取执行结果 strRst = p.StandardOutput.ReadToEnd(); }
[解决办法]
static void Main(string[] args) { Process ps = new Process(); ps.StartInfo.FileName = "cmd.exe"; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.RedirectStandardInput = true; ps.StartInfo.CreateNoWindow = true; ps.StartInfo.UseShellExecute = false; ps.StartInfo.StandardOutputEncoding = System.Text.Encoding.Default; ps.StartInfo.RedirectStandardError = false; ps.OutputDataReceived += new DataReceivedEventHandler(ps_OutputDataReceived); ps.Start(); ps.BeginOutputReadLine(); ps.StandardInput.WriteLine(@"dir c:\"); ps.StandardInput.Close(); ps.WaitForExit(); ps.Close(); } static void ps_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data == null) { return; } Console.Write(e.Data+"\n"); }
[解决办法]