Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/131: Рейтинг темы: голосов - 131, средняя оценка - 4.95
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2

freopen

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

Студворк — интернет-сервис помощи студентам
Из всех способов текстового ввода/вывода предпочитаю freopen из-за удобства отладки(лень каждый раз сворачивать студию и проверять файлы, а freopen можно просто закомментировать)
Сейчас столкнулся с проблемой, нужно вывести сначала в файл, и уже затем на экран.
Судя по описанию freopen закрывает текущий поток и открывает новый... Как можно открыть вывод в консоль заново?
Взято с http://www.cplusplus.com/refer... o/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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2011, 13:27
Ответы с готовыми решениями:

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

Задать с клавиатуры название файла для вывода freopen
Можно ли как-то сделать так, чтобы название файла, для вывода в него, вводилось с клавиатуры? И есть ли какой-нибудь хороший гайд по...

Работа с freopen и считыванием файла
Подскажите, какая функция есть при работе с freopen наподобие fseek при fopen?

4
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
13.05.2011, 16:02
Лучший ответ Сообщение было отмечено как решение

Решение

Не слишком ясно, зачем такая необходимость, коль можно другой 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 / 2
Регистрация: 02.03.2011
Сообщений: 40
23.06.2011, 21:00
Столкнулся с такой же необходимостью (перенаправить поток сначала в файл, потом обратно), и вот в чем проблема: после того как поток перенаправлен на экран (
C++
1
freopen("CON","w",stdout);
) начинаются сложности с кодировкой - вместо русских букв некрасивые. Как это исправить, и главное - почему это происходит.

Добавлено через 2 минуты
И еще: кто-нибудь может попроще объяснить отличие freopen от fopen?
Спасибо заранее!
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.06.2011, 21:11
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 / 2
Регистрация: 02.03.2011
Сообщений: 40
23.06.2011, 21:31
Пока еще не могу понять: проще или нет. Только сегодня начал разбираться с файловым вводом/выводом.
Конкретно: встал перед проблемой записи в файл неких данных. У Лафоре (по которому и изучаю) это выглядит так:
C++
1
2
3
4
5
ofstream outfile("fdata.txt");
outfile << '\n'
        << temp1
        << ' '  
        << temp2;
но это, так сказать, разовая запись - которая затирает предыдущую. Поэтому, когда я натолкнулся на перенаправление потока - мне показалось это проще.
А в Вашем примере мне вообще со многим придется разбираться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2011, 21:31
Помогаю со студенческими работами здесь

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru