C#中运行命令行截取输出流的例子

说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
运行结果图
窗体设计器产生的代码:
InBlock.gif namespace RunCMD 
InBlock.gif
InBlock.gif        partial  class CMDForm 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 必需的设计器变量。 
InBlock.gif                 /// </summary> 
InBlock.gif                 private System.ComponentModel.IContainer components =  null
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 清理所有正在使用的资源。 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="disposing">如果应释放托管资源,为 true;否则为 false</param> 
InBlock.gif                 protected  override  void Dispose( bool disposing) 
InBlock.gif                { 
InBlock.gif                         if (disposing && (components !=  null)) 
InBlock.gif                        { 
InBlock.gif                                components.Dispose(); 
InBlock.gif                        } 
InBlock.gif                         base.Dispose(disposing); 
InBlock.gif                } 
InBlock.gif 
InBlock.gifWindows 窗体设计器生成的代码 #region Windows 窗体设计器生成的代码 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 设计器支持所需的方法 - 不要 
InBlock.gif                 /// 使用代码编辑器修改此方法的内容。 
InBlock.gif                 /// </summary> 
InBlock.gif                 private  void InitializeComponent() 
InBlock.gif                { 
InBlock.gif                         this.label1 =  new System.Windows.Forms.Label(); 
InBlock.gif                         this.txtCommand =  new System.Windows.Forms.TextBox(); 
InBlock.gif                         this.btnExecute =  new System.Windows.Forms.Button(); 
InBlock.gif                         this.tbResult =  new System.Windows.Forms.TextBox(); 
InBlock.gif                         this.SuspendLayout(); 
InBlock.gif                         //    
InBlock.gif                         // label1 
InBlock.gif                         //    
InBlock.gif                         this.label1.AutoSize =  true
InBlock.gif                         this.label1.Location =  new System.Drawing.Point(6, 11); 
InBlock.gif                         this.label1.Name =  "label1"
InBlock.gif                         this.label1.Size =  new System.Drawing.Size(29, 12); 
InBlock.gif                         this.label1.TabIndex = 0; 
InBlock.gif                         this.label1.Text =  "ping"
InBlock.gif                         //    
InBlock.gif                         // txtCommand 
InBlock.gif                         //    
InBlock.gif                         this.txtCommand.Location =  new System.Drawing.Point(41, 8); 
InBlock.gif                         this.txtCommand.Name =  "txtCommand"
InBlock.gif                         this.txtCommand.Size =  new System.Drawing.Size(269, 21); 
InBlock.gif                         this.txtCommand.TabIndex = 1; 
InBlock.gif                         //    
InBlock.gif                         // btnExecute 
InBlock.gif                         //    
InBlock.gif                         this.btnExecute.Location =  new System.Drawing.Point(316, 6); 
InBlock.gif                         this.btnExecute.Name =  "btnExecute"
InBlock.gif                         this.btnExecute.Size =  new System.Drawing.Size(75, 23); 
InBlock.gif                         this.btnExecute.TabIndex = 2; 
InBlock.gif                         this.btnExecute.Text =  "执行"
InBlock.gif                         this.btnExecute.UseVisualStyleBackColor =  true
InBlock.gif                         this.btnExecute.Click +=  new System.EventHandler( this.btnExecute_Click); 
InBlock.gif                         //    
InBlock.gif                         // tbResult 
InBlock.gif                         //    
InBlock.gif                         this.tbResult.Location =  new System.Drawing.Point(8, 47); 
InBlock.gif                         this.tbResult.Multiline =  true
InBlock.gif                         this.tbResult.Name =  "tbResult"
InBlock.gif                         this.tbResult.ScrollBars = System.Windows.Forms.ScrollBars.Both; 
InBlock.gif                         this.tbResult.Size =  new System.Drawing.Size(383, 292); 
InBlock.gif                         this.tbResult.TabIndex = 3; 
InBlock.gif                         //    
InBlock.gif                         // CMDForm 
InBlock.gif                         //    
InBlock.gif                         this.AutoScaleDimensions =  new System.Drawing.SizeF(6F, 12F); 
InBlock.gif                         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
InBlock.gif                         this.ClientSize =  new System.Drawing.Size(403, 364); 
InBlock.gif                         this.Controls.Add( this.tbResult); 
InBlock.gif                         this.Controls.Add( this.btnExecute); 
InBlock.gif                         this.Controls.Add( this.txtCommand); 
InBlock.gif                         this.Controls.Add( this.label1); 
InBlock.gif                         this.Name =  "CMDForm"
InBlock.gif                         this.Text =  "运行Command的例子"
InBlock.gif                         this.ResumeLayout( false); 
InBlock.gif                         this.PerformLayout(); 
InBlock.gif 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                #endregion 
InBlock.gif 
InBlock.gif                 private System.Windows.Forms.Label label1; 
InBlock.gif                 private System.Windows.Forms.TextBox txtCommand; 
InBlock.gif                 private System.Windows.Forms.Button btnExecute; 
InBlock.gif                 private System.Windows.Forms.TextBox tbResult; 
InBlock.gif        } 
InBlock.gif}
 
关键部分代码:
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.ComponentModel; 
InBlock.gif using System.Data; 
InBlock.gif using System.Drawing; 
InBlock.gif using System.Text; 
InBlock.gif using System.Windows.Forms; 
InBlock.gif using System.Diagnostics; 
InBlock.gif using System.IO; 
InBlock.gif 
InBlock.gif namespace RunCMD 
InBlock.gif
InBlock.gif         /** 
InBlock.gif         * 作者:周公 
InBlock.gif         * blog:http://blog.csdn.net/zhoufoxcn 
InBlock.gif         * 日期:2007-07-07 
InBlock.gif         *    
InBlock.gif         * */
 
InBlock.gif         public partial  class CMDForm : Form 
InBlock.gif        { 
InBlock.gif                 public CMDForm() 
InBlock.gif                { 
InBlock.gif                        InitializeComponent(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private  void btnExecute_Click( object sender, EventArgs e) 
InBlock.gif                { 
InBlock.gif                        tbResult.Text = ""; 
InBlock.gif                        ProcessStartInfo start =  new ProcessStartInfo( "Ping.exe"); //设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到 
InBlock.gif                         //如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exe 
InBlock.gif                        start.Arguments = txtCommand.Text; //设置命令参数 
InBlock.gif                        start.CreateNoWindow =  true; //不显示dos命令行窗口 
InBlock.gif                        start.RedirectStandardOutput =  true; // 
InBlock.gif                        start.RedirectStandardInput =  true; // 
InBlock.gif                        start.UseShellExecute =  false; //是否指定操作系统外壳进程启动程序 
InBlock.gif                        Process p=Process.Start(start); 
InBlock.gif                        StreamReader reader = p.StandardOutput; //截取输出流 
InBlock.gif                         string line = reader.ReadLine(); //每次读取一行 
InBlock.gif                         while (!reader.EndOfStream) 
InBlock.gif                        { 
InBlock.gif                                tbResult.AppendText(line+ " "); 
InBlock.gif                                line = reader.ReadLine(); 
InBlock.gif                        } 
InBlock.gif                        p.WaitForExit(); //等待程序执行完退出进程 
InBlock.gif                        p.Close(); //关闭进程 
InBlock.gif                        reader.Close(); //关闭流 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif
 
本demo全部代码:http://dl2.csdn.net/down4/20070707/07162550531.rar

 















本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/166055 ,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值