我只是想通过在c#programm中使用tree.com来获取完整的目录列表。完成后,它应该将结果打印到文件和richtextbox。
现在我遇到了问题,tree.com在处理了多个dirs之后就停止了输出流长度为2938个字符,但它并没有关闭。
有没有人知道为什么会这样?
我的代码:
try
{
Process proThis = new Process();
ProcessStartInfo psiThis = new ProcessStartInfo("C:\\Windows\\System32\\cmd.exe", "/r tree C:\\");
psiThis.RedirectStandardOutput = true;
psiThis.UseShellExecute = false;
proThis.StartInfo = psiThis;
proThis.Start();
proThis.WaitForExit();
if (File.Exists(".\\Dateileselog.zdlog"))
{
File.Delete(".\\Dateileselog.zdlog");
}
string log = proThis.StandardOutput.ReadToEnd();
sendMessage(log.Replace("ÃÄÄÄ", "").Replace("³ ", "-->").Replace("ÀÄÄÄ", "").Replace(" ", ""), f1, false);
StreamWriter writer = new StreamWriter(".\\Dateileselog.zdlog");
writer.WriteLine(Base64Encode(log.Replace("ÃÄÄÄ", "").Replace("³ ", "-->").Replace("ÀÄÄÄ", "").Replace(" ", "")));
writer.Close();
}
catch (Win32Exception w)
{
sendMessage(w.Message, f1, false);
sendMessage(w.ErrorCode.ToString(), f1, false);
sendMessage(w.NativeErrorCode.ToString(), f1, false);
sendMessage(w.StackTrace, f1, false);
sendMessage(w.Source, f1, false);
Exception e = w.GetBaseException();
sendMessage(e.Message, f1, false);
}
提前致谢!
Filip Zocktan
答案 0 :(得分:0)
删除此行:
proThis.WaitForExit();
输出放在有限大小的缓冲区中。当缓冲区已满时,尝试写入缓冲区将阻止正在运行的进程,直到您从缓冲区读取,允许进一步输入缓冲区。
使用ReadToEnd()
已经确保您获得所有输出文本,并且只有在其他进程停止时才会返回。