Доброго времени суток.
Изучаю C++, разбираюсь с потоками... Имеется исходный текстовый файл input.txt со следующим содержимым:
Я хочу перенаправить поток ввода на файл input.txt, а поток вывода - в output.txt, после чего прочитать всё, что поступает во входной поток.
Код | // Перенаправление потоков ввода/вывода в C++ #include <iostream> #include <fstream>
int main () { // Сначала перенаправляем ввод... std::streambuf *inputBuckup = std::cin.rdbuf(); // запоминаем "родной" буфер потока ввода std::ifstream inputFileStr("c:\\temp\\input.txt", std::ios::in);// файл для чтения в поток ввода if (!inputFileStr){ std::cout << "Can't open the input file." << std::endl; return 1; } std::streambuf *inputFileBuf = inputFileStr.rdbuf(); // получаем буфер потока файла ввода std::cin.rdbuf(inputFileBuf); // перенаправляем поток ввода на файл ввода
// Теперь перенаправляем вывод... std::streambuf *outputBackup = std::cout.rdbuf(); // запоминаем "родной" буфер потока вывода std::ofstream outputFileStr("c:\\temp\\output.txt", std::ios::out);// файл для записи из потока вывода if (!outputFileStr){ std::cout << "Can't open the output file." << std::endl; return 2; } std::streambuf *outputFileBuf = outputFileStr.rdbuf(); // получаем буфер потока файла вывода std::cout.rdbuf(outputFileBuf); // перенаправляем поток вывода на файл вывода
// Теперь читаем всё, что имеется в потоке ввода, внося дополнительные поправки и // перенаправляем полученный результат в поток вывода... int i = 1; // Когда при вводе достигается конец файла, потоку, связанному с файлом, присваивается // значение false. while(std::cin){ // Предполагается, что в файле input.txt записаны числовые значения... int x = 0; std::cin >> x; std::cout << "row " << i++ << ": " << x; }
// При закрытии файлов их буферы потоков будут уничтожены. // Поэтому, прежде чем закрыть файл, возвращаем обратно "родные" буферы потоков: std::cin.rdbuf(inputBuckup); std::cout.rdbuf(outputBackup);
// Закрываем файлы inputFileStr.close(); outputFileStr.close();
return 0; }
|
Однако в файле output.txt я получаю не то, что ожидал. Получаю такое:
В чём ошибка? |