在标准输出上进行 fflush

发布于 2024-09-03 00:06:14 字数 742 浏览 1 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陌上芳菲 2024-09-10 00:06:14

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

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

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

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

Timestamps are updated at various times and for various reasons. The only guarantee about a file timestamp is that the file time is correctly reflected when the handle that makes the change is closed.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文