首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

StreamReader读取dos命令行的输出流的有关问题

2012-04-21 
StreamReader读取dos命令行的输出流的问题有如下代码(主要部分)Process pnew Process()p.StartInfo.File

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();及时返回?

[解决办法]

C# code
  if (p.HasExited)            {                                //从输出流获取执行结果                 strRst = p.StandardOutput.ReadToEnd();            }
[解决办法]
C# code
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");        }
[解决办法]
探讨
p.StandardInput.WriteLine("exit");

热点排行