在标准输出上进行 fflush
我有一个 FileSystemWatcher 对象设置来监视控制台应用程序写入的日志文件的更改。 通知过滤器设置为: watcher.NotifyFilter = NotifyFilters.Size | watcher.NotifyFilter = NotifyFilters.Size | watcher.NotifyFilter = NotifyFilters.Size |通知过滤器.LastWrite | NotifyFilters.LastAccess; 环境:操作系统:Win 2k8 服务器。
转储到重定向到文件 out.log 的 stdout 的控制台应用程序代码:
void MySet::Dump() { std::cout <<这个<<结束; fflush(标准输出); 在
我运行转储(在调试器的直接窗口中)后,文件大小保持不变。 如果我运行“type”命令,更新似乎就会发生。 任何想法
c:\temp>目录 5/21/2010 11:11 AM 4,159 out.log
转储后:(无变化)
c:\temp>目录 05/21/2010 11:11 AM 4,159 out.log
运行“type”命令...
c:\temp>type out.log 文件现在具有新的大小... c:\温度>目录 05/21/2010 11:11 AM 4,410 out.log
为什么会出现这种情况?我在这里错过了什么吗?提前致谢。
I have a FileSystemWatcher object setup to monitor changes to a log file written by a console app.
The notifier filter is set to:
watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess;
Env: OS: Win 2k8 server.
The console app code that dumps to the stdout that is redirected to the file out.log:
void MySet::Dump()
{
std::cout << this << endl;
fflush(stdout);
}
After I run the Dump ( in the immediate window of debugger), the file size remains the same.
If I run a "type" command the update seems to happen.
Any ideas
c:\temp> dir
5/21/2010 11:11 AM 4,159 out.log
After Dump: (No change )
c:\temp> dir
05/21/2010 11:11 AM 4,159 out.log
Run a "type" command ...
c:\temp>type out.log
File now has the new size ...
c:\temp> dir
05/21/2010 11:11 AM 4,410 out.log
Why is this behaviour ? Am I missing something here? Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
http://msdn.microsoft.com/en-us /library/ms724290(VS.85).aspx
因此,如果您只是刷新而不是关闭,则不能保证触发任何查看上次写入文件时间更改的操作。
http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx
So if you're only flushing, rather than closing, then anything looking at the last write file time changing is not guaranteed to be triggered.