我试图从中成长(类似于tail -F
做一些事情)的文件阅读,但必须有一些问题,我的代码:如何在C++中读取不断增长的文本文件?
string log, logFile("test.log");
size_t p = 0;
while(true)
{
ifstream ifs(logFile.c_str());
ifs.seekg(p); //*1
while(ifs.eof() == false)
{
getline(ifs, log);
cout << log << endl;
p = ifs.tellg(); //*2
}
nanosleep(&pause, NULL);
}
没有线// * 1和// * 2,日志文件被正确读取到最后,但是如果添加了新行,则不会发生任何事情。
随着seekg和tellg我试图存储当前的文件结束位置,以便当我重新打开它时,我可以去海峡那里读取已添加的内容。
我想知道我的代码出了什么问题,如果真的有必要关闭并重新打开同一个文件来达到此目的。
谢谢。
现在工作正常。谢谢。 – Pietro 2012-08-01 11:05:11
我注意到,如果我创建ifstream对象到它的循环中,但是如果我在外部创建它,则不会。是否有必要关闭并重新打开文件以阅读已添加的文件? – Pietro 2012-08-01 11:07:32
@Pietro,你需要在下次读取尝试之前调用'ifs.clear()'来清除'ifstream'的eof状态。我用这种方法来思考'tellg()'和'seekg()'是没有必要的。 – hmjd 2012-08-01 11:14:02