Как читать и писать в файл

У меня есть файл с именем read.txt E:\My_project\dictionary database\read.txt, и он выглядит так:

1245
15
12
454564
122
....

Я хочу прочитать read.txt построчно и хочу сохранить это значение в вектор и, наконец, вывести вектор и записать значения вектора в другой текстовый файл с именем write.txt, который будет выглядеть так же, как read.txt ?? Как я могу сделать это на С++???

Я попытался прочитать значение из файла следующим образом:

  ifstream ifs("read.txt", ifstream::in);

Но я не понимаю, где хранить файл read.txt. Каким должно быть расположение read.txt и write.txt???

Отредактировано: если я использую вектор для сохранения ввода из текста, я получаю сообщение об ошибке:

int textLine;
  vector<int> input;

  ifstream ifs("C:\\Users\\Imon-Bayazid\\Desktop\\k\\read.txt", ifstream::in);

  if (ifs.good())   {

        while (!ifs.eof()) {
              getline(ifs, textLine);
              input.push_back(textLine);
        }

        ifs.close();

  } else
      cout << "ERROR: can't open file." << endl;


        for(int i=0;i<input.size();i++)
          cout<<input.at(i);

person ImonBayazid    schedule 02.03.2013    source источник
comment
Почему вы добавили тег vector в этот пост? Возможно, вы должны что-то сделать с объектом std::vector?   -  person Austin Mullins    schedule 02.03.2013
comment
Попробуйте указать абсолютный путь для бита open?   -  person Ed Heal    schedule 02.03.2013
comment
.. Рад помочь вам, ребята, решить проблему. Вы все получите по одному.   -  person Ed Heal    schedule 02.03.2013


Ответы (3)


Поскольку имя файла жестко запрограммировано на "read.txt", файл должен находиться в той же папке, что и ваш исполняемый файл. Если расположение файла не будет меняться, вы можете жестко указать полный путь:

ifstream ifs("E:\\My_project\\dictionary database\\read.txt", ifstream::in);

(обратите внимание на двойную обратную косую черту: компилятор C++ должен рассматривать их как обычные косые черты).

person Sergey Kalinichenko    schedule 02.03.2013
comment
Я отредактировал свой вопрос, не могли бы вы увидеть это, чтобы ответить ?? @dasblinkenlight - person ImonBayazid; 02.03.2013
comment
@user2029069 user2029069 Вы получаете сообщение об ошибке, потому что не можете использовать getline(ifs, textLine); для чтения int. Для этого вам нужно использовать ifs >> textLine. Я предлагаю переименовать textLine во что-то более подходящее, например. intValue. - person Sergey Kalinichenko; 02.03.2013
comment
@ user2029069 применимо то же самое: используйте << для вывода int в файл и не забудьте добавить endl. Что-то вроде ofs << myInt << endl; в цикле. - person Sergey Kalinichenko; 02.03.2013

Если ваш бинарник находится в E:\My_project, то вам нужно настроить путь к открываемому файлу: ifstream ifs("./dictionary database/read.txt", ifstream::in);

См. этот связанный вопрос.

person Lander    schedule 02.03.2013
comment
Я отредактировал свой вопрос, не могли бы вы увидеть это, чтобы ответить ?? - person ImonBayazid; 02.03.2013

Вы можете указать абсолютный путь к файлу при его открытии:

ifstream ifs("E:\\My_project\\dictionary database\\read.txt", ifstream::in);

Или вы можете переместить исполняемую программу, которая читает файл, в тот же каталог, где находится файл.

Редактировать:

Объявив свой вектор следующим образом: vector<int> input; вы создаете вектор, в котором вы можете хранить только целочисленные значения, но то, что вы читаете из файла (textLine), является строкой. Если вы хотите интерпретировать числа из файла только как целые значения, вам придется использовать

input.push_back(atoi(textLine.c_str()));
person niculare    schedule 02.03.2013
comment
Я отредактировал свой вопрос, не могли бы вы увидеть это, чтобы ответить ?? - person ImonBayazid; 02.03.2013