读取两个文本文件然后组合它们

时间:2013-08-16 11:04:45

标签: c++ io text-files

我在编写这个代码时遇到了问题。此代码用于读取两个文本文件,然后在这两个文件中输出行。然后我希望能够放置两个文件并将它们组合在一起,但是第一行有file1文本,而后面就有file2文本。

这是我的代码:

#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
using namespace std;


int main()

{

std::ifstream file1("file1.txt");
std::ifstream file2("file2.txt");
//std::ofstream combinedfile("combinedfile.txt");
//combinedfile << file1.rdbuf() << file2.rdbuf();


char filename[400];
string line;
string line2;

cout << "Enter name of file 1(including .txt): ";
cin >> filename;

file1.open(filename);
cout << "Enter name of file 2 (including .txt): ";
cin >> filename;

file2.open(filename);

  if (file1.is_open())
  {
    while (file1.good() )
    {
      getline (filename,line);
      cout << line << endl;

    }
   file1.close();
  }

  else cout << "Unable to open file"; 

 return 0;
}
 if (file2.is_open())
  {
    while (file2.good() )
    {
      getline (filename,line);
      cout << line << endl;
    }
   file2.close();
  }

  else cout << "Unable to open file"; 

  return 0;}

3 个答案:

答案 0 :(得分:1)

首先,不要while (file.good())while (!file.eof()),它不会按预期工作。相反,例如while (std::getline(...))

如果您想阅读和打印备用线路,有两种可能的方法:

  1. 将两个文件读入两个std::vector个对象,并从这些向量中读取。或者可能将两个向量组合成一个向量,并打印出来。
  2. 从第一个文件中读取一行并打印出来,然后从第二个文件中读取并在循环中打印出来。
  3. 第一种选择可能是最简单的,但占用的内存最多。

    对于第二种选择,您可以这样做:

    std::ifstream file1("file1.txt");
    std::ifstream file2("file2.txt");
    
    if (!file1 || !file2)
    {
        std::cout << "Error opening file " << (file1 ? 2 : 1) << ": " << strerror(errno) << '\n';
        return 1;
    }
    
    do
    {
        std::string line;
    
        if (std::getline(file1, line))
            std::cout << line;
    
        if (std::getline(file2, line))
            std::cout << line;
    
    } while (file1 || file2);
    

答案 1 :(得分:0)

或者简单地说:

cout << ifstream(filename1, ios::in | ios::binary).rdbuf();
cout << ifstream(filename2, ios::in | ios::binary).rdbuf();

答案 2 :(得分:0)

你的第二个if语句不在main()函数之外。第一次返回0后;你关闭main() - 函数。 你的代码中的另一个问题是,如果它在main() - 函数内,你将永远不会到达第二个if语句,因为返回0;结束main()。 我猜你只想在第一个文件流“坏”时执行return,所以你需要一个else的范围;