我有一个FileSystemWatcher对象设置来监视由控制台应用程序写入的日志文件的更改。 通知程序筛选器设置为: watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess; 环境:操作系统:赢得2k8服务器。
转储到重定向到文件out.log的stdout的控制台应用程序代码:
void MySet :: Dump() { std :: cout<<这个<< ENDL; fflush(stdout中); }
运行转储后(在调试器的即时窗口中),文件大小保持不变。 如果我运行“类型”命令,则更新似乎发生。 任何想法
C:\ TEMP> DIR 5/21/2010 11:11 AM 4,159 out.log
转储后:(无变化)
C:\ TEMP> DIR 05/21/2010 11:11 AM 4,159 out.log
运行“类型”命令...
c:\ temp>输入out.log 文件现在有新的大小...... C:\ TEMP> DIR 05/21/2010 11:11 AM 4,410 out.log
为什么会出现这种情况?我在这里错过了什么吗?提前谢谢。
答案 0 :(得分:0)
http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx
时间戳因各种原因而在不同时间更新。关于文件时间戳的唯一保证是,当关闭进行更改的句柄时,文件时间会正确反映。
因此,如果您只是刷新而不是关闭,则无法保证触发任何查看上次写入文件时间更改的内容。