Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
#1

Перевод стандартных потоков ввода/вывода в файлы - C++

23.08.2010, 22:17. Просмотров 2058. Ответов 5
Метки нет (Все метки)

Интересует сея возможность.. Знаю про freopen с С файлами, но вот интересна такая возможность в С++. В книгах и сети написано типа такого:

C++
1
2
3
4
5
6
ofstream ofs;
// открыли файл
if(ofs)
{
cout=ofs;
}
Вполне неплохо. Но у меня так работать не хочет. Пробовал разными способами.

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <fstream>
 
int main()
{
   std::ofstream f("input.txt");
   std::cout=f;
   //f>>a>>b;
   //of<<a+b;
   return 0;
}
Кидает такую ошибку:

Error 1 error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2010, 22:17     Перевод стандартных потоков ввода/вывода в файлы
Посмотрите здесь:

C++. Файлы ввода-вывода, массивы, указатели C++
Рассчитать значения выражений используя для ввода и вывода текстовые файлы C++
C++ Текстовые файлы и потоки ввода/вывода
Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи C++
Перехват потоков ввода/вывода C++
Перевод потока из файлового ввода/вывода в консольный ввод/вывод C++
Потоки ввода-вывода C++
C++ Связывание потоков ввода-вывода
C++ Итераторы: зачем используется оператор инкремента для потоков вывода?
Файлы ввода/вывода в среде Codeblocks C++
Файлы для ввода/вывода C++
Синхронизация потоков ввода и вывода в Eclipce CDT C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 2
23.08.2010, 22:37     Перевод стандартных потоков ввода/вывода в файлы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
   ofstream f("output.txt");
   cout.rdbuf( f.rdbuf() );
   cout<<"Example";
   return 0;
}
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
23.08.2010, 22:41  [ТС]     Перевод стандартных потоков ввода/вывода в файлы #3
Евгений М., Огромное спасибо!
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,406
24.08.2010, 04:24     Перевод стандартных потоков ввода/вывода в файлы #4
Lavroff, не понял, чего именно ты хочешь. Если тебе нужно, чтобы в зависимости от ввода пользователя, к примеру, вывод шел в разные потоки, то тебе нужно использовать указатели на потоки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <cstdlib>
#include <fstream>
 
int main()
{
    std::ostream* p_os;
    std::ofstream logfile("log.txt");
    std::cout << "Output:\n1 - to stdout\n2 - to stderr\n3 - to logfile\n? ";
    char c;
    std::cin >> c;
    switch(c) // Выбираем поток, в который будем выводить данные
    {
    case '1':
        p_os = &std::cout; // Стандартный поток вывода
        break;
    case '2':
        p_os = &std::cerr; // Стандартный поток ошибок
        break;
    case '3':
        p_os = &logfile; // Файловый поток вывода
        break;
    default:
        std::cerr << "Unexpected character!" << std::endl;
        return EXIT_FAILURE;
    }
    // Вывод в выбранный поток:
    *p_os << "Example of an output" << std::endl;
    return EXIT_SUCCESS;
}
Евгений М., интересный пример, вижу в первый раз. А можно будет потом "восстановить" стандартный поток (чтобы в дальнейшем вывод производился в консоль)?
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 2
24.08.2010, 08:48     Перевод стандартных потоков ввода/вывода в файлы #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    streambuf *backup;
    ofstream f("output.txt");
    backup = cout.rdbuf();
    cout.rdbuf( f.rdbuf() );
    cout << "File";
    
    cout.rdbuf( backup );
    cout << "Stdout";
    return 0;
}
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
24.08.2010, 09:35     Перевод стандартных потоков ввода/вывода в файлы #6
Цитата Сообщение от Евгений М. Посмотреть сообщение
C++
1
2
3
streambuf *backup;
backup = cout.rdbuf();
cout.rdbuf( f.rdbuf() );
Можно так:
C++
1
streambuf* backup = cout.rdbuf( f.rdbuf() );
Yandex
Объявления
24.08.2010, 09:35     Перевод стандартных потоков ввода/вывода в файлы
Ответ Создать тему
Опции темы

Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru