Проверьте наличие файлов и разрешения на чтение - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь проверить, существует ли мой файл, указанный в file_path, и доступен ли он для чтения.Это мой код:

if (stat(file_path,&fileStat) > 0 && (fileStat.st_mode & S_IRUSR))
{
    puts("SUCCESS");
    create_message(OK);
}

Можете ли вы обнаружить проблему с данным кодом?Является ли деталь (fileStat.st_mode & S_IRUSR) правильной?

1 Ответ

0 голосов
/ 20 мая 2018

Вы не хотите использовать stat () для этого, вам нужен access ().

if (access(filename, R_OK)) {
    // code to handle missing or unreadable file
} else {
    // code to handle readable file
}

Ваш код будет работать, если вы измените тест на возвращаемое значение stat () в качестве очков Джонатана Леффлеравне, но Unix предоставляет системный вызов, чтобы делать именно то, что вы хотите, так что вы могли бы также использовать его.

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

...