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

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

Войти
Регистрация
Восстановить пароль
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
#1

Не работает ввод имени файла через fget и открытие через fopen - C++

19.10.2013, 01:15. Просмотров 578. Ответов 8
Метки нет (Все метки)

Уже все перепробовал и в гугле пару часов посидел. Но никак не пойму где проблема допустим в этом коде :
C++
1
2
3
4
5
6
7
8
9
10
char filename[1024];
char *p;
FILE * pFile;
while(printf("type name of the file"), fgets(filename, 1024, stdin)){
  if ((p = strchr(filename, '\n')) != NULL)
  *p = '\0';
 
  pFile = fopen(filename, "r");
  if(pFile != NULL) break;
}
Сначала промучился пока не нашел инфу за добавление \n символа в filename при вводе, потом нашел способ, чтобы удалить, который есть в коде, но все ровно ничего не получается. pFile не понятно что содержит при вводе любых названий файлов, которых нету или если ввести те, которые есть, то тоже самое будет. То есть в pFile что-то(отличное от Null) есть, даже при том если ввести любой набор символов. В общем не знаю как уже открыть этот файл... Кстати, такая запись работает : fopen("D:\\1.txt", "r");
Windows 7
Visual C++ 2010
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 01:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает ввод имени файла через fget и открытие через fopen (C++):

Как в функции открытия файла fopen() задать путь через ключи - C++
Как в функции открытия файла fopen() задать путь через ключи. Раньше путь задавался так: char...

Как в функции открытия файла fopen() задать путь через ключи - C++
Как в функции открытия файла fopen() задать путь через ключи. Раньше путь задавался так: char...

Открытие файла через переменную - C++
Здравствуйте, вот у меня к примеру будет такой код: string cfg; getline(cin, cfg); cfg += ".cfg"; ofstream access_file; ...

Открытие файла через ехешник - C++
Здравствуйте. Такой вопрос есть. Нужно разработать приложение, которое отображает параметры (package: name и launchable-activity: name ) из...

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

Открытие файла через объекта класса fstream - C++
Есть функция: bool Lr::MakeFile() { string name, fullname; cout <<"Введите имя нового файла:"; cin.sync(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
19.10.2013, 01:26 #2
Складывается впечатление, что fopen перегружена. Потому что, судя по вашему описанию, работает она совсем не так, как должна. Куда ссылается среда программирования, если навести курсор на fopen?
MrGluck
Модератор
Эксперт CЭксперт С++
7209 / 4375 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
19.10.2013, 01:34 #3
У меня открывает файл. А вы название вводите без кавычек и с расширением файла, я надеюсь?
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 01:43 #4
C++
1
2
3
4
5
6
7
8
    char filename[1024];
    FILE * pFile;
    while(printf("type name of the file"), fgets(filename, 1024, stdin))
    {
        filename[strlen(filename) - 1] = '\0';
        pFile = fopen(filename, "r");
        if(pFile != NULL) break;
    }
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.10.2013, 01:57  [ТС] #5
alsav22, Спасибо за вариант с удалением \n, а по поводу другого, то так как у других работает, то решил код скопировать в другой проект и все заработало как нужно и потом создал пустой проект и тоже все ок, а в этом, в котором не работало, то в настройках ничего не менял сто процентов и удалял все лишнее из кода, оставляя только этот фрагмент и все в целом как и в пустом проекте было. А в релиз папке есть только 2 тестовых файла. Даже не знаю что это за аномалия.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 02:00 #6
mzarb, Проект этот выложите, попробую у себя.

Добавлено через 1 минуту
Цитата Сообщение от mzarb Посмотреть сообщение
А в релиз папке есть только 2 тестовых файла.
Путь полный вводите? Если нет, то файлы должны быть в папке проекта, а не в папке релиз.
MrGluck
Модератор
Эксперт CЭксперт С++
7209 / 4375 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
19.10.2013, 02:01 #7
Относительный путь к файлам берется от бинарника, либо от папки проекта, как во многих IDE.
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.10.2013, 02:18  [ТС] #8
alsav22, с этим не досмотрел, но путь вводил полный для теста D:\\1.txt . Ладно, заработало и на том хорошо, просто я думал проблема в коде и из-за этого долго пытался понять в чем дело, а коль с кодом все хорошо, то дальше в дебри лезть не вижу смысла.
Ещё раз спасибо за помощь, а то ещё бы пол дня искал ошибки).
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
19.10.2013, 04:15 #9
Если в других проектах все работает, в нерабочем следует искать
C++
1
#define fopen что_то_там
или собственную функцию с именем fopen. Это самая распространенная причина.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 04:15
Привет! Вот еще темы с ответами:

Открытие файла/ярлыка/екзешника/папки через консоль С++ - C++
Всем здарова :) Очень много искал но так и не нашёл. Суть программы в том чтобы например при нажатии на кнопку 3 через консоль открывалась...

Создание/открытие файлов, чтение из файла и запись в файл через наследование - C++
Имеется следующая иерархия классов: Файл, Типизированный файл, Текстовый файл Методы: Создать/Открыть файл, Чение из файла, Запись в...

Что сделать, чтобы размер N был не через const, а через ввод на экран - C++
Что сделать, чтобы размер N был не через const, а через ввод на экране #include <iostream> using namespace std; const int N = 6; ...

Нахождение основных значений оформить через функцию RESHENIE(), ввод данных и вывод на печать через функцию MAIN() - C++
а помогите теперь эту задачку #include <iostream> int main() { int last = 0, next = 1; long sum = 1; for(;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.10.2013, 04:15
Ответ Создать тему
Опции темы

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