Невозможно открыть файл с помощью fopen () - PullRequest
8 голосов
/ 17 ноября 2009

Я пытался открыть файл и вывести текст, но продолжаю получать ошибки. Поэтому я подумал, что начну с самого начала и просто попробую открыть файл. Это мой код:

#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 3

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
        printf("Error");
    }
    fclose(file);
}

Когда я запускаю файл, «Ошибка» выводится на консоль и все. TestFile1.txt находится в том же месте, что и мой .exe. Как это исправить?

Ответы [ 8 ]

21 голосов
/ 17 ноября 2009

Вместо printf("Error");, вы должны попробовать perror("Error"), который может напечатать фактическую причину сбоя (например, проблема с разрешениями, неверный аргумент и т. Д.).

10 голосов
/ 17 ноября 2009

Как у вас работает файл? Это из командной строки или из IDE? Каталог, в котором находится ваш исполняемый файл, не обязательно является вашим рабочим каталогом.

Попробуйте использовать полный путь в fopen и посмотрите, исправляет ли это. Если так, то проблема такая, как описано.

Например:

file = fopen("c:\\MyDirectory\\TestFile1.txt", "r");
file = fopen("/full/path/to/TestFile1.txt", "r");

Или откройте командное окно и перейдите в каталог, где находится ваш исполняемый файл, а затем запустите его вручную.

Кроме того, вы можете вставить простое (для Windows или Linux / UNIX / BSD / и т. Д. Соответственно):

system ("cd")
system("pwd")

перед fopen, чтобы показать, в каком каталоге вы на самом деле находитесь.

5 голосов
/ 17 ноября 2009

Небольшая проверка ошибок имеет большое значение - вы всегда можете проверить значение errno или вызвать perror () или strerror (), чтобы получить больше информации о том, почему не удалось выполнить вызов fopen ().

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

4 голосов
/ 17 ноября 2009

Что ж, теперь вы знаете, что есть проблема, следующий шаг - выяснить, что именно является ошибкой, что происходит, когда вы компилируете и запускаете это?:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
      perror("Error");
    } else {
      fclose(file);
    }
}
3 голосов
/ 17 ноября 2009

Рабочий каталог вашего исполняемого файла, вероятно, настроен на что-то иное, чем каталог, в котором он сохранен. Проверьте настройки IDE.

1 голос
/ 17 ноября 2009

Попробуйте использовать абсолютный путь к имени файла. И если вы используете Windows, используйте getlasterror (), чтобы увидеть фактическое сообщение об ошибке.

0 голосов
/ 17 ноября 2009

В дополнение к вышесказанному, вас может заинтересовать отображение вашего текущего каталога:

int MAX_PATH_LENGTH = 80;
char* path[MAX_PATH_LENGTH];
getcwd(path, MAX_PATH_LENGTH);
printf("Current Directory = %s", path);

Это должно работать без проблем на платформе gcc / glibc. (Я наиболее знаком с этим типом платформы). Был опубликован вопрос , в котором говорилось о getcwd и Visual Studio, если вы работаете на платформе типа Windows.

0 голосов
/ 17 ноября 2009

Каталог выходной папки должен быть настроен на другой каталог в IDE. Либо вы можете изменить это, либо заменить имя файла на полный путь к файлу.

Надеюсь, это поможет.

...