2014-02-16 4 views
-1

Я использую этот кусок кода C в Linux, чтобы проверить, существует ли файл в том же каталоге, что и файл «.c»:Проверьте, если файл существует в текущем каталоге

int file_exist(char *filename) 
{ 
    FILE *fp = fopen(filename, "r"); 
    if (fp) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 

, но он всегда возвращает ложь хотя файл существует! Проблема в том, что Linux ищет в другом каталоге? Как это решить?

+4

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

+2

'fopen()' может возвращать указатель 'NULL', даже если файл существует. – nouney

+3

Не говоря уже о том, что файл может быть там, но у вас нет разрешения на его открытие для чтения. Почему бы вам просто не вызвать «access (filename, F_OK)»? –

ответ

-2

Использовать метод ferror для проверки, все в порядке с входным файлом.

FILE *fp; 
fp = fopen("RECORD.txt","r"); 

if (ferror(fp) != 0){ 
    printf("File has error"); 
    exit(0); 
} 
+0

Это действительно плохая идея. Если файл не открывается, 'fp' является' NULL', а 'ferror' может выходить из строя. –

2

Просто используйте стат - http://linux.die.net/man/2/stat

Если она возвращает 0, то файл существует. Вы даже можете узнать, можете ли вы его прочитать.

+0

Можете ли вы привести мне пример? – Lisa

+1

Просто небольшое примечание, если 'stat()' возвращает '-1', вы можете проверить' errno == ENOENT', чтобы убедиться, что файл не существует, и он не сработал по другой причине. – MBlanc

Смежные вопросы