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 当其他进程停止时。
我只是想通过在 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 当其他进程停止时。