C ++ Очистка содержимого текстового файла между запусками приводит к записи только последней строки - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь записать несколько строк в текстовый файл. Я хотел бы очистить файл перед добавлением в него при каждом запуске. Я могу очистить предыдущее содержимое, но когда я это делаю, по какой-то причине только последняя строка моего входного файла добавляется к выходному файлу. Я также попытался с помощью remove () стереть файл и получил тот же вывод.

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

Я был бы рад найти способ решить эту проблему и, возможно, понять, почему это происходит. Я использую C ++ 11.

Я посмотрел здесь: Как очистить файл в режиме добавления в C ++

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <stdio.h>

int main() {
  std::fstream infile;
  std::string line;

  infile.open("file.txt" , std::ios::in);

  while (std::getline(infile, line)) {
    std::istringstream line_buffer(line);
    std::string word;

    std::fstream outfile;
    outfile.open("out.txt", std::ios::out);
    outfile.close();
    outfile.open("out.txt", std::ios::app);
    while (line_buffer >> word) {
      std::cout << word << " ";
      outfile << word << " ";
    }
    std::cout << std::endl;
    outfile << std::endl;
  }
  return 0;
}

1 Ответ

0 голосов
/ 14 сентября 2018

Проблема в том, что вы очищаете файл на каждой итерации цикла while, вы можете просто открыть выходной файл перед циклом следующим образом:

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <stdio.h>

int main() {
  std::fstream infile;
  std::string line;

  infile.open("file.txt" , std::ios::in);

  std::fstream outfile;
  outfile.open("out.txt", std::ios::out);

  while (std::getline(infile, line)) {
    std::istringstream line_buffer(line);
    std::string word;

    while (line_buffer >> word) {
      std::cout << word << " ";
      outfile << word << " ";
    }
    std::cout << std::endl;
    outfile << std::endl;
  }

  outfile.close();
  return 0;
}
...