C ++文本文件指针问题

时间:2009-12-01 18:54:17

标签: c++ fstream

我正在编写一个函数,该函数应该(如果文件已经存在)将第一个数字递增1并将函数的参数附加到文件的末尾。

示例:

  1. 追加(4,9);
  2. 追加(5,6);
  3. 文件内容为1: 1 \ n 4 \ n 9

    2处的文件内容: 2 \ n 4 \ n 9 \ n 5 \ n 6

    int append (int obj, int objType) {
    
    ifstream infile;
    infile.open("stuff.txt");
    
    if (infile.fail()){
      infile.close();
    
      ofstream outfile;
      outfile.open("stuff.txt");
      outfile << 1 << endl << obj << endl << objType;
      outfile.close();
    }
    else {
    
      int length = 0;
    
      while (!infile.eof()){
         int temp;
         infile >> temp;
         length ++;
      }
    
      infile.close();
      infile.open("stuff.txt");
    
      int fileContents[length];
      int i = 0;
    
      while (!infile.eof()){ /*PROGRAM DOES NOT ENTER HERE*/
         infile >> fileContents[i];
         i ++;
      }
    
      infile.close();
    
      ofstream outfile;
      outfile.open("stuff.txt");
    
      fileContents[0] +=1;
    
      for (i = 0; i < length; i++){
         outfile << fileContents[i] << endl ;
      }
    
      outfile << obj << endl << objType;
    
    
    }
    

    程序永远不会进入第二个while循环,因此内容永远不会复制到数组中,然后再复制到文件中。我不确定问题究竟是什么或如何解决它。任何帮助将不胜感激。 :)

2 个答案:

答案 0 :(得分:2)

你还没有读过来重置EOF标志,所以你仍然从前一个文件中获取EOF。

这不是正确的文件输入方式。尝试更像这样的东西:

int temp;
while (infile >> temp)
{
    ...
}

请参阅Neil Butterworth的博客文章,他在之前的问题中将其链接起来:http://punchlet.wordpress.com/2009/12/01/hello-world/

答案 1 :(得分:2)

而不是以这种方式关闭和重新打开文件(我不确定此操作是否会重置您需要的文件位置!)为什么不使用std::fstream::seekg()并将文件“倒回”到开头

infile.seekg(0, ios::beg)