好的,我正在尝试使用 Tail 来监视日志文件,但是我无法以编程方式获得与使用相同参数通过 cmd 提示符手动运行它时相同的行为。
通过 cmd 提示符运行时,它会立即显示新行。不过,以编程方式,在“缓冲区”释放所有行之前,我必须等待日志文件中大约75 多个新行。
这是我现在拥有的代码。
private const string tailExecutable = @"C:\tail.exe";
private const string logFile = @"C:\test.log";
private static void ReadStdOut()
{
var psi = new ProcessStartInfo
{
FileName = tailExecutable,
Arguments = String.Format("-f \"{0}\"", logFile),
UseShellExecute = false,
RedirectStandardOutput = true
};
// Running same exe -args through cmd.exe
// works perfectly, but not programmatically.
Console.WriteLine("{0} {1}", psi.FileName, psi.Arguments);
var tail = new Process();
tail.StartInfo = psi;
tail.OutputDataReceived += tail_OutputDataReceived;
tail.Start();
tail.BeginOutputReadLine();
}
static void tail_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
}
我之前使用过 OutputDataReceived 事件,但从未遇到过这些缓冲/垃圾邮件问题。
我现在很困惑。
*编辑*
我在 CodeProject 上找到了这个 wintail 项目,并且将切换到该项目,因为缓冲区使这个解决方案太慢了。
感谢您的回答。