2009-12-11 3 views
2

Я вижу, что ifstream :: open() возвращает void и не предлагает никакого способа увидеть, не открылся ли файл из-за разрешений. Что хорошего api, чтобы проверить, доступны ли разрешения на чтение или альтернативные разрешения на запись для файла для текущего процесса на C++?Что такое хороший способ проверить, есть ли у файла разрешения?

+1

I/O зависит от ОС, возможно, если бы вы могли сообщить нам свою ОС, можно было бы дать более конкретный ответ. –

+0

Возможный дубликат: http://stackoverflow.com/questions/1138508/in-c-on-unix-how-can-a-process-tell-what-permissions-it-has-to-a-file-without- op –

+0

Это для Linux. – WilliamKF

ответ

2

Попробуйте доступ POSIX() функцию, в unistd.h

2

Вы также можете использовать stat, который возвращает кучу информации, режим, UID и GID в том числе:

struct stat { 
     dev_t  st_dev;  /* ID of device containing file */ 
     ino_t  st_ino;  /* inode number */ 
     mode_t st_mode; /* protection */ 
     nlink_t st_nlink; /* number of hard links */ 
     uid_t  st_uid;  /* user ID of owner */ 
     gid_t  st_gid;  /* group ID of owner */ 
     dev_t  st_rdev; /* device ID (if special file) */ 
     off_t  st_size; /* total size, in bytes */ 
     blksize_t st_blksize; /* blocksize for file system I/O */ 
     blkcnt_t st_blocks; /* number of 512B blocks allocated */ 
     time_t st_atime; /* time of last access */ 
     time_t st_mtime; /* time of last modification */ 
     time_t st_ctime; /* time of last status change */ 
    }; 

Я не знаю, хороших оболочек C++ для этих функций нижнего уровня.

1

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

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