我看到ifstream :: open()返回void并且没有提供任何方法来查看文件是否由于权限而未打开。什么是一个很好的api来测试C ++中当前进程的文件是否有读权限或写权限?
答案 0 :(得分:2)
在unistd.h中尝试POSIX access()函数
答案 1 :(得分:2)
你也可以使用stat
返回一堆信息,包括mode,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 ++包装器。
答案 2 :(得分:1)
如果您使用的是Windows,则可以使用GetFileAttributesEx来检查文件的属性。如果是只读的,则可能需要调用SetFileAttributes来取消设置只读标志。
答案 3 :(得分:0)
您可以使用chmod命令。 它有3位数字,分别对应于所有者,组,其他用户 777代表最大权限。