C ++在两次运行之间清除文本文件的内容仅导致最后一行被写入

时间:2018-09-14 18:20:04

标签: c++ c++11 fstream

我正在尝试在文本文件中写几行。我想在每次运行之前将文件追加为空。我能够清除以前的内容,但是由于某种原因,我只能清除输入文件的最后一行附加到输出文件。我还尝试使用remove()擦除文件并收到相同的输出。

另一方面,在不清除文件或将其删除的情况下,所有内容都会正确地附加到输出文件中。

我很乐意找到解决此问题的方法,也许理解为什么会发生这种情况。我正在使用C ++ 11。

我看过这里:How to clear a file in append mode in 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 :(得分:2)

问题在于,您需要在while循环的每次迭代中清除文件,您可以像这样在循环之前打开outfile:

#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;
}