0

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

例子:

  1. 附加(4,9);
  2. 附加(5,6);

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 循环,因此永远不会将内容复制到数组中,然后再复制到文件中。我不确定到底是什么问题或如何解决它。任何帮助将不胜感激。:)

4

2 回答 2

2

您尚未完成读取以重置 EOF 标志,因此您仍然从前一个文件中获取 EOF。

无论如何,这不是进行文件输入的正确方法。尝试更多类似的东西:

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

并查看 Neil Butterworth 在之前的问题中链接的博客条目:http: //punchlet.wordpress.com/2009/12/01/hello-world/

于 2009-12-01T19:09:54.817 回答
2

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

infile.seekg(0, ios::beg)
于 2009-12-01T19:11:53.500 回答