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

tree.com stops after processing 2938 characters

我只是想通过在 c# 程序中使用 tree.com 来获取完整的目录列表。完成后,它应该将结果打印到一个文件和一个 richtextbox。

现在我遇到了问题,tree.com 在处理了输出流长度为 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);
            }

提前致谢!

菲利普·佐克坦

删除这一行:

proThis.WaitForExit();

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

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