我可以将 ifstream 重定向到 cin 吗?
Can I redirect an ifstream to cin?
我有一个从终端读取输入的程序,来自 cin
的流在多个 类 中用于不同级别的解析。
我不想使用 cin
从终端获取数据,而是想读入一个包含我需要解析的信息的文件,但我不想修改我所有的 header 和 .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 的第一个字符。
istream
个对象从 std::streambuf
读取,并且可以换入换出。相关的成员函数是.rdbuf
只需将指针交换到 std::streambuf
:
ifstream file("myfile.txt");
string line;
if (file.is_open()) {
cin.rdbuf(file.rdbuf()); // swap
cin >> line;
}
std::cout << line;
您还可以将底层 C stdin
文件句柄重定向到不同的文件,这也会影响您的 cin
:
freopen ("myfile.txt", "r", stdin);
这里有一个非常简单快捷的方法。
如果您的文件名为 "file.txt",代码将是:
fstream cin("file.txt");
这样,文件中的所有内容都将重定向到 cin >>
我有一个从终端读取输入的程序,来自 cin
的流在多个 类 中用于不同级别的解析。
我不想使用 cin
从终端获取数据,而是想读入一个包含我需要解析的信息的文件,但我不想修改我所有的 header 和 .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 的第一个字符。
istream
个对象从 std::streambuf
读取,并且可以换入换出。相关的成员函数是.rdbuf
只需将指针交换到 std::streambuf
:
ifstream file("myfile.txt");
string line;
if (file.is_open()) {
cin.rdbuf(file.rdbuf()); // swap
cin >> line;
}
std::cout << line;
您还可以将底层 C stdin
文件句柄重定向到不同的文件,这也会影响您的 cin
:
freopen ("myfile.txt", "r", stdin);
这里有一个非常简单快捷的方法。
如果您的文件名为 "file.txt",代码将是:
fstream cin("file.txt");
这样,文件中的所有内容都将重定向到 cin >>