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

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

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

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

19.10.2013, 01:15. Просмотров 605. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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(); ...

8
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
19.10.2013, 01:26 #2
Складывается впечатление, что fopen перегружена. Потому что, судя по вашему описанию, работает она совсем не так, как должна. Куда ссылается среда программирования, если навести курсор на fopen?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7497 / 4613 / 694
Регистрация: 29.11.2010
Сообщений: 12,631
19.10.2013, 01:34 #3
У меня открывает файл. А вы название вводите без кавычек и с расширением файла, я надеюсь?
0
alsav22
5428 / 4823 / 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;
    }
1
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.10.2013, 01:57  [ТС] #5
alsav22, Спасибо за вариант с удалением \n, а по поводу другого, то так как у других работает, то решил код скопировать в другой проект и все заработало как нужно и потом создал пустой проект и тоже все ок, а в этом, в котором не работало, то в настройках ничего не менял сто процентов и удалял все лишнее из кода, оставляя только этот фрагмент и все в целом как и в пустом проекте было. А в релиз папке есть только 2 тестовых файла. Даже не знаю что это за аномалия.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 02:00 #6
mzarb, Проект этот выложите, попробую у себя.

Добавлено через 1 минуту
Цитата Сообщение от mzarb Посмотреть сообщение
А в релиз папке есть только 2 тестовых файла.
Путь полный вводите? Если нет, то файлы должны быть в папке проекта, а не в папке релиз.
1
MrGluck
Модератор
Эксперт CЭксперт С++
7497 / 4613 / 694
Регистрация: 29.11.2010
Сообщений: 12,631
19.10.2013, 02:01 #7
Относительный путь к файлам берется от бинарника, либо от папки проекта, как во многих IDE.
1
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.10.2013, 02:18  [ТС] #8
alsav22, с этим не досмотрел, но путь вводил полный для теста D:\\1.txt . Ладно, заработало и на том хорошо, просто я думал проблема в коде и из-за этого долго пытался понять в чем дело, а коль с кодом все хорошо, то дальше в дебри лезть не вижу смысла.
Ещё раз спасибо за помощь, а то ещё бы пол дня искал ошибки).
0
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
19.10.2013, 04:15 #9
Если в других проектах все работает, в нерабочем следует искать
C++
1
#define fopen что_то_там
или собственную функцию с именем fopen. Это самая распространенная причина.
0
19.10.2013, 04:15
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(;...


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

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

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