fflush on stdout

时间:2010-05-21 16:14:44

标签: c# filesystemwatcher

我有一个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

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

1 个答案:

答案 0 :(得分:0)

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

  

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

因此,如果您只是刷新而不是关闭,则无法保证触发任何查看上次写入文件时间更改的内容。