[急救]fstream对象如何读取一个更新中的文件?

evfree 2013-12-14 04:47:37
需求如下:
程序A输出内容到 res.txt
程序B启动时,定位到 res.txt的末尾,然后不断读取res.txt中新出现的行。

fsFile.open(strResFileNm.c_str(), fstream::in | fstream::app);
fsFile.seekg(0, fsFile.end);

while (TRUE)
{
....
fsFile.getline(szBuff, sizeof(szBuff), '\n');
...
}
就停住了。

难道B打开文件的时候,只能读取到打开之前的res.txt内容?A不断写进去的读不到吗?
该如何实现呢?
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
evfree 2013-12-19
  • 打赏
  • 举报
回复
引用 6 楼 qq120848369 的回复:
fstream::app,这个每次操作都会定位到文件末尾,末尾哪有数据呢? 很明显应该用ate,只在打开时定位到末尾一次就可以了,后续就是不停的读。 另外,fstream是有EOF标记位的,你恰好读到末尾那接下来的getline都会直接返回失败,你必须clear恢复一下flag.
谢谢,用clear恢复就OK了。
qq120848369 2013-12-16
  • 打赏
  • 举报
回复
fstream::app,这个每次操作都会定位到文件末尾,末尾哪有数据呢? 很明显应该用ate,只在打开时定位到末尾一次就可以了,后续就是不停的读。 另外,fstream是有EOF标记位的,你恰好读到末尾那接下来的getline都会直接返回失败,你必须clear恢复一下flag.
赵4老师 2013-12-16
  • 打赏
  • 举报
回复
摒弃fstream 使用_open(Windows)或open(Linux)
buyong 2013-12-16
  • 打赏
  • 举报
回复
传说中curses库可以做这个事
5t4rk 2013-12-16
  • 打赏
  • 举报
回复
双管道 readpipe writepipe
我爱CPP 2013-12-14
  • 打赏
  • 举报
回复
因为你读到了EOF了。一般用管道、共享内存、消息队列来完成,或直接使用SOCKET发消息,依赖小。
Binzo 2013-12-14
  • 打赏
  • 举报
回复
记得有个叫管道的东西,好像很容易做到。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧