Наличие файла с указанием его пути - PullRequest
3 голосов
/ 17 сентября 2011

Учитывая путь, есть ли способ узнать, существует ли файл, не открывая файл?

Спасибо

Ответы [ 4 ]

7 голосов
/ 17 сентября 2011

Самый эффективный способ - access с флагом F_OK.

stat также работает, но он намного тяжелее, поскольку должен читать содержимое инода, а не только каталог.

3 голосов
/ 17 сентября 2011

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

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
main()
{
        struct stat BUF;
        if(stat("/Filepath/FileName",&BUF)==0)
        {
                printf("File exists\n");
        }
}

Другой способ - использовать функцию access .

#include <unistd.h>

main()
{
        if(access("/Filepath/FileName", F_OK) != -1 ) 
        {
               printf("File exists\n");
        } 
        else 
        {
               printf("File does not exist\n");
        }       
}
1 голос
/ 17 сентября 2011
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>

int rc;
struct stat mystat;
rc = stat(path, &mystat);

Теперь проверьте rc и (возможно) errno.

РЕДАКТИРОВАТЬ 2011-09-18 приложение:

Обе функции access () и stat () возвращают 0, если путь указывает на нефайл (directory, fifo, symlink и т. Д.)

В случае stat () это можно проверить с помощью "((st_mode & S_IFREG) == S_IFREG)". Лучший способ - просто попытаться открыть файл с помощью open () или fopen ().

0 голосов
/ 17 сентября 2011

Попробуйте удалить его (unlink ()).В случае успеха, он больше не существует.Если неудачно, интерпретируйте errno, чтобы увидеть, существует ли оно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...