2010-01-24 4 views
2

В C++ как определить, имеет ли программа доступ только для чтения или доступ на чтение или запись в файл? Я искал библиотеку файловой системы boost, но мне еще нужно найти что-то, что могло бы мне помочь. Прямо сейчас я думаю об открытии файла, пытаясь написать внутри и проверить на наличие ошибки, но это не очень подходит для этого.Как определить, может ли файл быть записан с использованием C++

Любой ключ?

EDIT: он должен был бы быть кросс-платформенный

+2

Я считаю, что ваш метод является рекомендуемым методом –

ответ

5

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

+0

Я довольно новичок в boost :: filesystem, но почему бы не использовать file_status :: permissions? –

4

Системный вызов, который большинство библиотек времени выполнения полностью поддержки, является

#include <unistd.h> 

if (0 == access (char *pathname, int mode)) 
    // permission is granted 

где режимявляется F_OK, чтобы проверить наличие файла, или маску, состоящую из побитового ИЛИ одного или более из R_OK, W_OK и X_OK.

+0

+1 Я этого не знал! – Ben

+1

В соответствии с руководством системы BSD, функция access() является потенциальным отверстием для защиты и никогда не должна использоваться. На страницах руководства Linux также упоминается безопасность, но не указывайте, что функция не должна использоваться. – jschmier

+0

Это не системный вызов и поддерживается только в системах POSIX. – 2010-01-24 20:16:11

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