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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 83, средняя оценка - 4.75
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
#1

freopen - C++

13.05.2011, 13:27. Просмотров 11206. Ответов 4
Метки нет (Все метки)

Из всех способов текстового ввода/вывода предпочитаю freopen из-за удобства отладки(лень каждый раз сворачивать студию и проверять файлы, а freopen можно просто закомментировать)
Сейчас столкнулся с проблемой, нужно вывести сначала в файл, и уже затем на экран.
Судя по описанию freopen закрывает текущий поток и открывает новый... Как можно открыть вывод в консоль заново?
Взято с http://www.cplusplus.com/reference/c...stdio/freopen/
C++
1
2
3
4
5
6
7
8
9
10
11
/* freopen example: redirecting stdout */
#include <stdio.h>
 
int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout); //По идее здесь тоже надо написать freopen(консоль,"a",stdout);
  printf("This sentence must be redirected back to console");   //добавлено мною, ничего не выводит(ни в файл, ни в консоль)
  return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2011, 13:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос freopen (C++):

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравствуйте, подскажите, пожалуйста, есть ли в C# возможность работать с текстом аналогично работе freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); в...

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравствуйте, подскажите, пожалуйста, есть ли в C# возможность работать с текстом аналогично работе freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); в...

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравствуйте, подскажите, пожалуйста, есть ли в C# возможность работать с текстом аналогично работе freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); в...

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравствуйте, подскажите, пожалуйста, есть ли в C# возможность работать с текстом аналогично работе freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); в...

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравству

Не находит freopen - C++
Кусок кода из программы nt main () { freopen(&quot;theatre.in&quot;, &quot;r&quot;, stdin); freopen(&quot;theatre.out&quot;, &quot;w&quot;, stdout); ...

Функция freopen(stdout) - "неверный дескриптор" - C (СИ)
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout... Я хотел сделать программу, которая бы, сперва создавала некий...

Аналог freopen("input.txt", "rt", stdin); в C# - C#
Здравствуйте, подскажите, пожалуйста, есть ли в C# возможность работать с текстом аналогично работе freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); в...


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

Или воспользуйтесь поиском по форуму:
4
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
13.05.2011, 16:02 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не слишком ясно, зачем такая необходимость, коль можно другой FILE создать и писать туда что хочешь...
Но если всё-таки очень хочется, то переоткрыть стандартный вывод в консоль( это применительно к Windows, в *nix'ах как - не знаю, может, по-другому как ) через freopen можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
/* freopen example: redirecting stdout */
#include <stdio.h>
 
int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  freopen("CON","w",stdout);
  printf("This sentence must be redirected back to console");
  return 0;
}
Добавлено через 8 минут
Можно и слегка по-другому, например, через POSIX функцию fdopen, она первым параметром принимает файловый дескриптор, в который можно подставить STDOUT_FILENO из unistd.h, чтобы перенаправить стандартный вывод обратно.
3
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
23.06.2011, 21:00 #3
Столкнулся с такой же необходимостью (перенаправить поток сначала в файл, потом обратно), и вот в чем проблема: после того как поток перенаправлен на экран (
C++
1
freopen("CON","w",stdout);
) начинаются сложности с кодировкой - вместо русских букв некрасивые. Как это исправить, и главное - почему это происходит.

Добавлено через 2 минуты
И еще: кто-нибудь может попроще объяснить отличие freopen от fopen?
Спасибо заранее!
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
23.06.2011, 21:11 #4
Svid, freopen просто переводит вывод/ввод из/в поток в/из файла. а fopen открывает файл соответственно.

Добавлено через 5 минут
Юзайте fstream) Проще ведь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
 
int main()
{
    std::ofstream ofs("our_file.txt");
    std::streambuf* our_buffer = std::cout.rdbuf(ofs.rdbuf());
    std::cout << "Write to file\n";
    std::cout.rdbuf(our_buffer);
    std::cout << "Write to stdout\n";
    ofs.close();
}
2
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
23.06.2011, 21:31 #5
Пока еще не могу понять: проще или нет. Только сегодня начал разбираться с файловым вводом/выводом.
Конкретно: встал перед проблемой записи в файл неких данных. У Лафоре (по которому и изучаю) это выглядит так:
C++
1
2
3
4
5
ofstream outfile("fdata.txt");
outfile << '\n'
        << temp1
        << ' '  
        << temp2;
но это, так сказать, разовая запись - которая затирает предыдущую. Поэтому, когда я натолкнулся на перенаправление потока - мне показалось это проще.
А в Вашем примере мне вообще со многим придется разбираться
0
Yandex
Объявления
23.06.2011, 21:31
Ответ Создать тему
Опции темы

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