Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

23.08.2010, 22:17. Просмотров 2327. Ответов 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>'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2010, 22:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перевод стандартных потоков ввода/вывода в файлы (C++):

Перехват потоков ввода/вывода - C++
Проблема в следующем: Имеется консольное приложение, например такое: //1.exe #include &lt;iostream&gt; using namespace std; int main() ...

Связывание потоков ввода-вывода - C++
cin.tie(&amp;cout); cout&lt;&lt;&quot;Enter x: &quot;; cin&gt;&gt;x; для чего применяется связывание? а то чтот не доходит:) и чем несвязанные потоки...

Синхронизация потоков ввода и вывода в Eclipce CDT - C++
Недавно перешел на программирование на Eclipse, но загвоздка в том, что если нужно ввести какое-то значение, то его ввод вызывается до...

Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи - C++
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: • конструктор, • деструктор, ...

Файлы для ввода/вывода - C++
Посчитайте A + B. Технические условия Входные данные В каждой строке задано два целых числа A и B (|A|, |B| ≤ 30000)....

Файлы ввода/вывода в среде Codeblocks - C++
Занимаюсь олимпиадным программированием (писал на паскале , собираюсь переходить на c++) Поставил CodeBlocks Проблема: ...

5
Евгений М.
1047 / 986 / 58
Регистрация: 28.02.2010
Сообщений: 2,857
Завершенные тесты: 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;
}
3
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.08.2010, 22:41  [ТС] #3
Евгений М., Огромное спасибо!
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
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;
}
Евгений М., интересный пример, вижу в первый раз. А можно будет потом "восстановить" стандартный поток (чтобы в дальнейшем вывод производился в консоль)?
1
Евгений М.
1047 / 986 / 58
Регистрация: 28.02.2010
Сообщений: 2,857
Завершенные тесты: 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;
}
3
Andrew_Lvov
Эксперт С++
260 / 190 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 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() );
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2010, 09:35
Привет! Вот еще темы с ответами:

Текстовые файлы и потоки ввода/вывода - C++
Доброго времени суток. Уважаемый гуру, не могли бы вы мне помочь с решением данной программы. Алгоритм знаю, но никак не могу его...

C++. Файлы ввода-вывода, массивы, указатели - C++
Люди, учусь на инженера... зачем я пошла учится сюда уже не знаю... Помогите кто чем может, профи просьба сильно не ругаться и не...

Перевод потока из файлового ввода/вывода в консольный ввод/вывод - C++
Есть кусок программы: freopen (&quot;G:\\input.txt&quot;, &quot;r&quot;, stdin); freopen (&quot;G:\\output.txt&quot;, &quot;w&quot;, stdout); //Открываем файлы - один...

Рассчитать значения выражений используя для ввода и вывода текстовые файлы - C++
Нужна помощь! Вот задание: Составить программу для расчета значений z1 и z2 (результаты должны совпадать). Исходные данные считываются...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru