发布
社区首页 >问答首页 >检查Windows/Linux中文件的写入权限

检查Windows/Linux中文件的写入权限
EN

Stack Overflow用户
提问于 2010-09-27 01:49:26
回答 4查看 11.4K关注 0票数 8

我想知道如何检查我是否有文件夹的写权限。

我正在编写一个C++项目,我应该将一些数据打印到result.txt文件中,但我需要知道我是否有权限。

Linux和Windows之间的检查是否不同?因为我的项目应该在Linux上运行,而我目前在Visual Studio中工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-27 02:07:12

检查权限的可移植方法是尝试打开文件并检查是否成功。如果不是,并且errno (来自标头 )被设置为值EACCES yes,并带有一个S,则您没有足够的权限。这应该可以在Unix/LinuxWindows上工作。stdio示例:

代码语言:javascript
代码运行次数:0
复制
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,或者报告比“失败”更具体的错误。

正如曾傑瑞·科芬所写的,不要依赖单独的访问测试函数,因为您的程序将容易出现竞争条件和安全漏洞。

票数 12
EN

Stack Overflow用户

发布于 2010-09-27 02:00:40

唯一合理的做法是尝试创建文件,如果失败,就告诉用户有问题。任何提前测试的尝试,以及只有在您能够创建和写入文件的情况下才尝试创建文件的尝试,都会受到竞态条件(当您检查时具有权限,但当您尝试使用它时它已被删除,或者反之亦然)和角落情况(例如,您有权在该目录中创建文件,但尝试在该目录中写入将超过您的磁盘配额)的问题。唯一能知道的方法就是试一试。

票数 5
EN

Stack Overflow用户

发布于 2010-09-27 02:06:23

实际测试文件写入权限的最正确方法是尝试写入文件。这是因为不同的平台以非常不同的方式公开写权限。更糟糕的是,仅仅因为操作系统告诉您可以(或不能)写入文件,它实际上可能是在说谎,例如,在unix系统上,文件模式可能允许写入,但文件位于只读介质上,或者相反,文件可能实际上是内核创建的供进程自己使用的字符设备,因此即使其文件模式设置为全零,内核也允许该进程(且仅允许该进程)随意处理它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3799053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档