1

我在使用 fstream 的 getline 指令时遇到问题。这是我的代码片段:


boolean_1=true;
while(true)
{
   if(boolean_1)
   {
      //some stuff
   }
   else
   {
        save_file.open("save.txt", fstream::in);
        //some stuff
        save_file.close();
   }

    mission_file.open(filename, fstream::in);
    mission_file.getline(buffer_line, 256);

    //some other stuff

    boolean_1=false;
    save_file.open("save.txt", fstream::out);
    //write something
    save_file.close();    
}

此代码应在第一次运行时打开任务文件,并在下一次迭代时打开保存文件。保存文件在每个循环结束时创建。至少它应该像这样工作。因为,第一次一切正常,但在下一次迭代中,“mission_file.getline(buffer_line, 256);” 返回一个空行,使程序崩溃。此外,如果 boolean_1 以 false 开始,则循环工作正常,直到下一个循环。

我已经检查了是否存在所需的“.txt”,mission_file 和 save_file 都返回 is_open() true。

4

2 回答 2

2

从您发布的代码摘录中无法看到,但听起来您在std::fstream每个循环中重复使用相同的对象。

在需要重新打开文件的地方在循环内创建一个新的本地对象会更清楚。

如果您必须重新使用同一个fstream对象来打开一个新文件(或再次打开同一个文件),您必须确保在从新文件读取之前清除所有流错误标志。

clear在从新文件第一次读取之前的某个时间点执行 a应该这样做。

mission_file.clear()
于 2010-08-21T09:34:48.157 回答
0

你确定它mission_file被关闭了吗,因为我没有看到mission_file.close()。还是您只是错过了将那行放在此处的代码片段中。

于 2010-08-21T09:06:03.580 回答