0

我有一个 FileSystemWatcher 对象设置来监视控制台应用程序写入的日志文件的更改。通知过滤器设置为:watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess; 环境:操作系统:Win 2k8 服务器。

转储到重定向到文件 out.log 的标准输出的控制台应用程序代码:

void MySet::Dump() { std::cout << this << endl; fflush(标准输出);}

在我运行转储(在调试器的即时窗口中)后,文件大小保持不变。如果我运行“类型”命令,更新似乎就会发生。有任何想法吗

c:\temp> 目录 2010 年 5 月 21 日上午 11:11 4,159 out.log

转储后:(无变化)

c:\temp> 目录 05/21/2010 11:11 AM 4,159 out.log

运行“类型”命令...

c:\temp>type out.log 文件现在具有新大小... c:\temp> dir 05/21/2010 11:11 AM 4,410 out.log

为什么会出现这种行为?我在这里错过了什么吗?提前致谢。

4

1 回答 1

0

http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx

时间戳会在不同时间出于各种原因更新。关于文件时间戳的唯一保证是在关闭进行更改的句柄时正确反映文件时间。

因此,如果您只是刷新而不是关闭,那么任何查看最后写入文件时间更改的内容都不能保证被触发。

于 2010-05-21T16:25:40.457 回答