我想知道如何检查我是否有文件夹的写权限。
我正在编写一个C++项目,我应该将一些数据打印到result.txt文件中,但我需要知道我是否有权限。
Linux和Windows之间的检查是否不同?因为我的项目应该在Linux上运行,而我目前在Visual Studio中工作。
发布于 2010-09-27 02:07:12
检查权限的可移植方法是尝试打开文件并检查是否成功。如果不是,并且errno
(来自标头 )被设置为值EACCES
yes,并带有一个S,则您没有足够的权限。这应该可以在Unix/Linux和Windows上工作。stdio示例:
FILE *fp = fopen("results.txt", "w");
if (fp == NULL) {
if (errno == EACCES)
cerr << "Permission denied" << endl;
else
cerr << "Something went wrong: " << strerror(errno) << endl;
}
Iostreams的工作方式会稍有不同。他们不保证在两个平台上都设置errno
,或者报告比“失败”更具体的错误。
正如曾傑瑞·科芬所写的,不要依赖单独的访问测试函数,因为您的程序将容易出现竞争条件和安全漏洞。
发布于 2010-09-27 02:00:40
唯一合理的做法是尝试创建文件,如果失败,就告诉用户有问题。任何提前测试的尝试,以及只有在您能够创建和写入文件的情况下才尝试创建文件的尝试,都会受到竞态条件(当您检查时具有权限,但当您尝试使用它时它已被删除,或者反之亦然)和角落情况(例如,您有权在该目录中创建文件,但尝试在该目录中写入将超过您的磁盘配额)的问题。唯一能知道的方法就是试一试。
发布于 2010-09-27 02:06:23
实际测试文件写入权限的最正确方法是尝试写入文件。这是因为不同的平台以非常不同的方式公开写权限。更糟糕的是,仅仅因为操作系统告诉您可以(或不能)写入文件,它实际上可能是在说谎,例如,在unix系统上,文件模式可能允许写入,但文件位于只读介质上,或者相反,文件可能实际上是内核创建的供进程自己使用的字符设备,因此即使其文件模式设置为全零,内核也允许该进程(且仅允许该进程)随意处理它。
https://stackoverflow.com/questions/3799053
复制相似问题