c ++无限循环读取文件创建重定向命令输出

时间:2015-04-11 07:25:54

标签: c++ command output

我正在编写一个代码,在其中检查给定目录中的新文件或目录。在我的情况下新的被认为是上次代码已在该目录中运行。所以我创建了一个日志文件,然后我在字符串向量中获取日志。代码如下:

ifstream Finp;
string directory;
vector <string> newfilelist;

system( ("ls -B "+directory+" > "+directory+"filelist.log").c_str() );
Finp.open( (directory+"filelist.log").c_str() );
while ( true ) {
  string stmp;
  Finp >> stmp;
  if( Finp.eof() ) break;
  newfilelist.push_back( stmp );
}

现在发生的事情如下:

1)如果日志“filelist.log”已经存在,那么一切都顺利进行

2)如果日志“filelist.log”不存在,则会正确创建,但是当代码打开文件并开始获取它时,它会陷入循环并且stmp字符串无休止地为空(就好像file没有eof()但是空了!)。有趣的是,如果我在打开日志之前放置一个随机系统命令,一切都会顺利进行!

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我认为,你唯一需要改变的就是那个令人讨厌的while(true)循环到while(file<< to_variable)。如果有一些数据,这只能读取数据。

eof()实际上是非常具有欺骗性的。您可能会猜到它在文件末尾被调用。虽然如此,当您尝试在>>操作中读取文件时,流中的指针将在EOF之前跳回并尝试读取那里的内容。

这里有很多线程只讨论EOF并将其用作循环的条件。

答案 1 :(得分:0)

如果文件不存在,Finp.open()基本上会失败,检查Finp.eof()毫无意义。在尝试进入循环以读取或检查eof之前,您需要使用Finp检查Finp.good()状态,然后仅在此方法返回true时继续读取。