tree.com在处理2938个字符后停止

时间:2017-03-19 01:34:56

标签: c# redirectstandardoutput

我只是想通过在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

1 个答案:

答案 0 :(得分:0)

删除此行:

proThis.WaitForExit();

输出放在有限大小的缓冲区中。当缓冲区已满时,尝试写入缓冲区将阻止正在运行的进程,直到您从缓冲区读取,允许进一步输入缓冲区。

使用ReadToEnd()已经确保您获得所有输出文本,并且只有在其他进程停止时才会返回。