我可以将ifstream重定向到cin吗?

时间:2016-03-04 12:43:24

标签: c++ ifstream

我有一个程序从终端读取输入,来自cin的流在多个类中用于在各个级别进行解析。

我没有使用cin从终端获取数据,而是想读取一个包含我需要解析的信息的文件,但我不想修改我的所有头文件和.cpp文件接受ifstream&参数。

为了保持现有代码,我只是想将ifstream重定向到cin,但不知道如何。

假设我在main中有以下内容:

ifstream inFile("myfile.txt", ifstream::io);

string line;
while(getline(inFile, line)) 
{
  char firstChar;
  inFile >> firstChar;
  cout << firstChar;
  inFile.ios::rdbuf(cin.rdbuf());
  Continue myFile;
} 

continue.cpp我正在做的事情:

Continue()
{
   string line;
   cin >> line;
   cout << "---remaining line: " << line << "\n";
}

然而,它只打印来自main的第一个字符。

4 个答案:

答案 0 :(得分:8)

只需将指针交换到std::streambuf

ifstream file("myfile.txt");
string line;
if (file.is_open()) {
    cin.rdbuf(file.rdbuf());  // swap
    cin >> line;
}
std::cout << line;

答案 1 :(得分:4)

istream读取的

std::streambuf个对象,可以在out中交换。相关成员函数为.rdbuf

答案 2 :(得分:1)

您还可以将基础C stdin文件句柄重定向到其他文件,这也会影响您的cin

freopen ("myfile.txt", "r", stdin);

答案 3 :(得分:-1)

这是一种非常快速简便的方法。

如果您的文件名为“file.txt”,则代码为:

fstream cin("file.txt");

这样,文件中的所有内容都会被重定向到cin&gt;&gt;