2017-01-30 37 views
2

У меня есть этот очень простой код:C - Почему fopen не работает?

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

int main (void) 
    { 
    FILE * file_ptr = NULL; 

    file_ptr = fopen ("file.txt", "r"); 

    if (file_ptr == NULL) 
     { 
     puts ("Error!"); 
     return EXIT_FAILURE; 
     } 
    else 
     { 
     puts ("O.k.!"); 
     } 

    return EXIT_SUCCESS; 
    } 

Выход:

Error! 

Почему Еореп не работает? Файл не защищен, не открыт в другом месте и хранится в той же папке, что и * .exe этой программы. Я также попробовал это с предоставлением полного пути к файлу и массивом, в котором хранится имя файла. Каждый раз он выдает «Ошибка!».

Что происходит?

Я использую Eclipse Neon.2 Release (4.6.2) с новейшим компилятором cygwin gcc на Windows 10 64bit.

Благодарим за помощь!

+3

Почему вы не проверяете 'errno' за * причину *' fopen() 'failed? – EOF

+2

Вы также можете попробовать 'fopen (" xxyyzzqq.txt "," w ")', а затем выполнить поиск на жестком диске, чтобы увидеть, где был создан файл. – user3386109

+2

@ user3386109: Хорошая идея! Оказалось, что моя новая установка Eclipse хочет получить файл в каталоге src, а не в каталоге debug (где находится exe-файл), где захотела моя старая установка. Спасибо огромное! Это стоило мне целого дня ... Я новичок. –

ответ

2

Проблема была решена путем изменения fopen к

file_ptr = fopen("xxyyzzqq.txt", "w"); 

в поиске, а затем жесткий диск, чтобы увидеть, где был создан файл.

Оказывается, файл был создан в исходном каталоге проекта, а не в каталоге отладки (где находится файл .exe), в отличие от старой установки, которая использовала каталог отладки в качестве рабочего каталога.

1

perror может помочь.

FILE *file_ptr = fopen("file.txt", "r"); 
if (!file_ptr) { 
    perror("fopen"); 
} else { 
    printf("It's working!"); 
} 

Похожий вопрос: fopen() not working in C

+0

Спасибо, ваш код выдает: «fopen: Нет такого файла или каталога». Я попробовал еще раз с предоставлением полного пути к файлу и понял, что для этого я должен использовать «\\» вместо «\» («P: \\ Office \\ Eclipse C (++) \\ workspace \ \ Test \\ Debug \\ file.txt "). Затем Eclipse находит файл. Но он также должен работать без пути, когда файл находится в той же папке, что и программа, но это не так. Это проблема, потому что я должен написать программу, так как пользователь может ввести имя файла с помощью fgets(). Это нехорошее решение, когда необходимо ввести полный путь. –

+0

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

+0

Благодаря пользователю «user3386109» проблема решена, но я также благодарю вас за вашу помощь, Дэвид. –