Подтвердить что ты не робот

Fopen() возвращает указатель NULL, но файл определенно существует

Код, который у меня есть, выглядит следующим образом:

FILE *txt_file = fopen("data.txt", "r");
if (txt_file == NULL) {
    perror("Can't open file");
} 

Возвращаемое сообщение об ошибке:

Невозможно открыть файл: нет такого файла или каталога

Файл "data.txt" определенно существует в рабочем каталоге (он существует в каталоге, который содержит мои файлы .c и .h), поэтому почему функция fopen() возвращает указатель NULL?

4b9b3361

Ответ 1

Возможно ли, что имя файла не является "data.txt"?

В Unix имена файлов представляют собой байтовые строки, а не строки символов, и в их именах можно создавать файлы с элементами управления, такими как backspace. В прошлом я видел случаи, когда копирование в терминалы приводило к файлам с обычными именами, но попытка открыть имя файла, которое появляется в списке каталогов, приводит к ошибке.

Один из способов сказать наверняка, что имена файлов - это то, что вы думаете:

$ python
>>> import os
>>> os.listdir('.')

Ответ 2

Стандартная проблема. Попробуйте

FILE *txt_file = fopen("C:\\SomeFolder\\data.txt", "r");

т.е. сначала попробуйте открыть его с полным абсолютным путем; если он работает, вам просто нужно выяснить, что представляет собой текущий каталог с _getcwd(), а затем исправить свой относительный путь.

Ответ 3

Убедитесь, что ваш входной файл находится в том же каталоге, что и исполняемый файл, который может отличаться от того, где хранятся ваши исходные файлы. Если вы запускаете программу в отладчике IDE, убедитесь, что ваш рабочий каталог установлен в расположение входного файла. Кроме того, если вы работаете в * nix, а не в Windows, вам может потребоваться добавить "./" к имени входного файла.

Ответ 4

Невидимый символ SPACE в имени файла?

Раз в год у меня есть аналогичная проблема: Я пытаюсь открыть файл с именем файла в строке, полученной из операции скрининга. Когда я печатаю имя, это кажется ОК, но fopen() возвращает нулевой указатель. Единственная помощь заключается в печати имени с разделителями, показывающих точное начало и конец строки имени файла. Конечно, это не помогает с непечатаемыми символами.

Ответ 5

Моя проблема заключалась в том, что у меня был файл filename.txt, и я не понимал, что на самом деле это файл filename.txt.txt из-за того, что окна не показывают расширение.

Ответ 6

У меня была аналогичная проблема, когда я знал, что путь правильный, и файл находился в правильном месте. Проверьте права доступа к файлу. Возможно, программа не может получить доступ к файлу, потому что получает разрешение на отказ.