c#中怎样确认cmd中输入的一行命令执行完毕

我用cmd命令格式化一个移动磁盘,省略前面的设置,输入命令行为:p.StandardInput.WriteLine("formatk:/fs:fat");//写入命令p.... 我用cmd命令格式化一个移动磁盘,
省略前面的设置,输入命令行为:
p.StandardInput.WriteLine("format k: /fs:fat"); //写入命令
p.StandardInput.WriteLine(""); //输入回车符
p.StandardInput.WriteLine("Memery"); //输入磁盘标志
p.StandardInput.WriteLine("exit"); //结束cmd进程
string ss = p.StandardOutput.ReadToEnd();

其中p为进程,程序只执行了前面三行就死掉不动了,也就是那行exit命令根本没有执行,设置断点发现其实exit往进程p里写了,但是cmd根本没有执行这行,输出文件里也看不到这行的写入,感觉就像是exit写入太早,cmd没有反应过来,因为我在输入exit行设置断点,等待大概10秒钟,后继续运行,exit行能被执行,能成功关闭p进程。
程序死掉后,我查看了我要格式化的那个磁盘其实已经格式化了

请问,有什么方法让我获取格式化动作完成,让程序等待格式化完成后再写入exit行
尝试了你的方法,显示流不支持查找,请问还有别的方法吗,是不是sw.BaseStream.Length不是这种用法??
展开
 我来答
百度网友6809e30a0
2009-02-22 · TA获得超过5285个赞
知道大有可为答主
回答量:3765
采纳率:0%
帮助的人:2821万
展开全部
试下用这个函数,p为进程对象,cmd为需要写入的命令,我估计如果命令处理完,后台会把流里面的数据截走,这样长度就会为0,如果不为0代表还未执行结束,我只是这样估计的,不确定能否成功

public void WriteLine(Process p, String cmd)
{
StreamWriter sw = p.StandardInput;
while(sw.BaseStream.Length>0);
sw.WriteLine(cmd);
sw.Flush();
}
tn瓶邪
推荐于2016-04-07 · TA获得超过1882个赞
知道小有建树答主
回答量:610
采纳率:98%
帮助的人:112万
展开全部
调用cmd命令的代码
#region 停止录象-压缩成flv
private void Stop_Click(object sender, EventArgs e)
{
this.ChangeView();
Close();
}
/// <summary>
/// 压缩成flv
/// </summary>
private void ChangeView()
{
stnameflv = stname + ".flv";
string str = @""+fileName+" "+stnameflv+"";
//string str = @"f:\test.avi f:\test_allen.flv";
RunFFMpeg(str);
}
//运行FFMpeg的视频解码,
public void RunFFMpeg(string strCmd)
{
//创建并启动一个新进程
Process p = new Process();
//设置进程启动信息属性StartInfo,这是ProcessStartInfo类,包括了一些属性和方法:
p.StartInfo.FileName = @"F:\ffmpeg.exe"; //程序名
p.StartInfo.Arguments = " -i " + strCmd; //执行参数
p.Start();
}

//运行Cmd.exe执行Dos 命令,并返回执行结果
public string RunCmd(string command)
{
//创建并启动一个对进程
Process p = new Process();

//Process类有一个StartInfo属性,这是ProcessStartInfo类,包括了一些属性和方法,例如:
p.StartInfo.FileName = "cmd.exe"; //程序名
p.StartInfo.Arguments = " /c " + command; //执行参数
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输入
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = true; //设置不显示窗口
p.Start();
//p.StandardInput.WriteLine(command); //也可以用这种方式输入要执行的命令
//p.StandardInput.WriteLine("exit"); //不过要记得加上Exit要不然下一行程式执行的时候会当机
//必须创建可以自动转换完成以后,结束进程的代码
return p.StandardOutput.ReadToEnd(); //从输出流取得命令执行结果
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式