Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
1

Функция freopen(stdout) - "неверный дескриптор"

04.09.2013, 23:20. Показов 4116. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У Меня проблема с функцией freopen с использованием stdout...
Я хотел сделать программу, которая бы, сперва создавала некий файл, после чего эта же программа могла бы загрузить текст из другого текстового файла и вывести его на экран.
Для этого Я решил использовать функцию freopen.
Т.е. что Я делаю:
Я объявляю переменную файлового типа с указателем(FILE*), и присваиваю Ей значение через freopen("путь_файла","тип_доступа",/*как Я понимаю...*/метод_записи_или_получения_данных).
Вот, что у Меня вышло:
C++
1
2
3
4
5
6
7
8
FILE* MyFile=NULL;
char FileWay[BUFSIZ];
setlocale(LC_ALL,"Russian");
puts("Введите путь к сохраняемому файлу");
gets(FileWay);
MyFile=freopen(FileWay,"w",stdout);
puts("This is test-file from My programm(Microsoft Visual Studio Ultimate 2012)!");
fclose(MyFile);
Программа успешно создала текстовый файл, содержимое которого было "This is test-file from My programm(Microsoft Visual Studio Ultimate 2012)!".
Далее, Я дополнил код аналогичным кодом, только теперь "r",stdin(т.е. теперь не записываем в файл, а читаем из файла).
И в итоге у Меня вышел следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FILE* MyFile2=NULL;
char FileWay2[BUFSIZ];
char FileText2[BUFSIZ];
puts("Введите путь загружаемого файла");
gets(FileWay2);
if (freopen(FileWay2,"r",stdin)==NULL)
{
puts("Неверно введён файловый путь!");
return false;
}
else
{
MyFile2=freopen(FileWay2,"r",stdin);
gets(FileText2);
fclose(MyFile2);
puts(FileText2);
system("pause");
}
Если Я использую один лишь из этих кодов - программа работает правильно. Но когда Я использую оба эти кода, программа выдаёт Мне ошибку "Неверный дескриптор."(в самой консоли)...
Кликните здесь для просмотра всего текста



Пробовал разделить код "началом/концом", но, это не помогло...
Отдельно, каждый из этих кодов - работает(в крайнем случае, результат был именно таким, каким Я его ожидал увидеть), а если вместе - то, выдаётся ошибка "Неверный дескриптор."...
Подскажите пожалуйста, как решить данную проблему?
Кликните здесь для просмотра всего текста

Возможно, это связано с тем, что программа использует stdout/stdin, и нужно, как то указывать, что теперь Мы не используем файл, и саму команду fropen("путь_файла","метод_доступа",strout)...


Добавлено через 32 минуты
Кликните здесь для просмотра всего текста

Полный код программы:
Кликните здесь для просмотра всего текста

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
31
32
33
34
35
36
37
38
39
40
41
42
#include "stdafx.h" //#define _CTR_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <Windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
{
  FILE* MyFile=NULL;
  char FileWay[BUFSIZ];
  setlocale(LC_ALL,"Russian");
  puts("Введите путь к сохраняемому файлу");
  gets(FileWay);
  MyFile=freopen(FileWay,"w",stdout);
  puts("This is test-file from My programm(Microsoft Visual Studio Ultimate 2012)!");
  fclose(MyFile);
}
 
system("cls");
    
{
  FILE* MyFile2=NULL;
  char FileWay2[BUFSIZ];
  char FileText2[BUFSIZ];
  puts("Введите путь загружаемого файла");
  gets(FileWay2);
  if (freopen(FileWay2,"r",stdin)==NULL)
  {
  puts("Неверно введён файловый путь!");
  return false;
  }
  else
  {
  MyFile2=freopen(FileWay2,"r",stdin);
  gets(FileText2);
  fclose(MyFile2);
  puts(FileText2);
  system("pause");
  } 
}
return 0;
}

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2013, 23:20
Ответы с готовыми решениями:

Перенаправить поток в stdout после возова freopen()
Пытаюсь совершить сие деяние, но безрезультатно: #include &lt;stdio.h&gt; ...

Неверный дескриптор
При установки любой проги выдает &quot;неверный дескриптор&quot;.:wall: Получается все &quot;exe&quot;. Вирусов нет....

Неверный дескриптор
Добрый день! Написал сценарий проверки работы агента администрирования Kaspersky Endpoint Security....

Неверный дескриптор
Сделал прогу, где в Form открывается консоль. При первом запуске все норм, а при втором выдает эту...

2
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
05.09.2013, 16:14 2
Лучший ответ Сообщение было отмечено Jack Wade как решение

Решение

1. Зачем вы 2 раза открываете файл?

Цитата Сообщение от Jack Wade Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
if (freopen(FileWay2,"r",stdin)==NULL)
{
puts("Неверно введён файловый путь!");
return false;
}
else
{
MyFile2=freopen(FileWay2,"r",stdin);
gets(FileText2);
}
Нужно:
C
1
2
3
4
5
6
7
8
...
if ((MyFile2=freopen(FileWay2,"r",stdin))==NULL)
  {
    puts("Неверно введён файловый путь!");
    return false;
  }
  else
...
2. Кто будет восcтанавливать stdout после первого переназначения?
нужно добавить что-то вроде:
C
1
2
3
4
...
fclose(MyFile);
freopen("CON","w",stdout);
...
И все будет работать.
1
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
05.09.2013, 16:32  [ТС] 3
dmitry94, большое спасибо! Теперь всё работает!
Вот полный код программы, которая Мне нужна была
Кликните здесь для просмотра всего текста

Код написан под M.V.S.2012...
Кликните здесь для просмотра всего текста

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
31
32
33
34
35
#include "stdafx.h"//Сюда добавляем так же #define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <locale.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf("Enter file way \n");
    char S1[BUFSIZ];
    gets(S1);
    FILE* F1=freopen(S1,"w", stdout);
    puts("This is test-file from Microsoft Visual Studio 2012!");
    fclose(F1);
    freopen("CON","w",stdout);
 
    FILE* F2;
    char S2[BUFSIZ];
    char RESULT[BUFSIZ];
    printf("Enter loading file way \n");
    gets(S2);
    if ((F2=freopen(S2,"r",stdin))==NULL)
    {
        printf("Error loading file! \n");
        return false;
    }
    else
    {
        gets(RESULT);
        fclose(F2);
        freopen("CON","r",stdin);
        printf("Loading file succsess! \n");
        puts(RESULT);
        _getch();
    }
    return 0;
}

0
05.09.2013, 16:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2013, 16:32
Помогаю со студенческими работами здесь

Ошибка: Неверный дескриптор (6)
Здравствуйте, пытаюсь сделать экспорт в базу данных. При выполнении возникает ошибка &quot;Неверный...

Поток и неверный дескриптор
Добрый день уважаемые форумчане! Может кто сталкиваться с данной ошибкой? При компиляции проекта...

JScript Неверный дескриптор
написал функцию, а при выводе на экран он ругается &quot;Неправильный дескриптор&quot;. Как исправить? ......

CopyFromScreen - Неверный дескриптор
Всем привет. Есть прога, которая делает периодически скриншоты нужной области var size = new...

Ошибка неверный дескриптор
При запуске приложения возникает данная ошибка, помогите разобраться:-|

HP Deskjet D4100 - неверный дескриптор
Перестал работать принтер. Смена драйвера и порта не помогает. При переустановке , втом числе с...

Console.WriteLine - неверный дескриптор
Есть код: public void ConsoleStart() { if (AllocConsole()) {...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru