2010-05-21 243 views
0

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

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

空隙MYSET ::转储() { 的std :: COUT < <此< < ENDL; fflush(stdout); }

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

C:\ TEMP>目录 5/21/2010 11:11 4,159 out.log

转储后:(无变化)

C:\ TEMP>目录 05 /二千○十分之二十一11:11 4,159 out.log

运行 “类型” 命令

C:\ TEMP>键入out.log 文件现在有新的大小... ç :\ temp>目录 05/21/2010 11:11 AM 4,410 out.log

这是为什么?我在这里错过了什么吗?提前致谢。

回答

0

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

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

所以,如果你只是冲洗,而不是关闭,那么任何看最后写入文件时间变化的东西都不能保证被触发。

+0

感谢您的回复。我试过fclose,但是这会关闭文件以便后续写入 - 即,fclose不是一个选项。通知过滤器应该使用哪些其他标准(大小除外)? – user85917 2010-05-21 16:51:45

+0

那么,除了大小是什么改变?它可能是唯一的选择,虽然它不一定要更新,直到收盘。您可以通过打开和关闭阅读句柄(这是哪种类型)来强制更新,但不能保证。 – 2010-05-21 17:07:22