Проблемы с указателем в текстовом файле C ++ - PullRequest
0 голосов
/ 01 декабря 2009

Я пишу функцию, которая должна (если файл уже существует) увеличивать первое число на единицу и добавлять параметры функции в конец файла.

Пример:

  1. append (4,9);
  2. append (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, поэтому содержимое никогда не копируется в массив, а затем в файл. Я не уверен точно, в чем проблема или как ее исправить. Любая помощь будет принята с благодарностью. :)

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Вместо того, чтобы закрывать и открывать файл таким образом (я не уверен, что эта операция сбросит требуемую позицию файла!), Почему бы не использовать std::fstream::seekg() и просто "перемотать" файл в начало

infile.seekg(0, ios::beg)
2 голосов
/ 01 декабря 2009

Вы еще не сделали чтение для сброса флага EOF, поэтому вы все еще получаете EOF из предыдущего файла.

В любом случае, это неправильный способ ввода файлов. Попробуйте что-то вроде этого:

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

И посмотрите запись в блоге Нила Баттерворта, которую он связал в предыдущем вопросе: http://punchlet.wordpress.com/2009/12/01/hello-world/

...