Avi*_*djo 8 c++ permissions file
我想知道如何检查我是否具有文件夹的写权限.
我正在编写一个C++项目,我应该将一些数据打印到result.txt文件,但我需要知道我是否拥有权限.
Linux和Windows之间的检查有所不同吗?因为我的项目应该在Linux上运行,目前我在Visual Studio中工作.
Fre*_*Foo 10
检查权限的可移植方法是尝试打开文件并检查是否成功.如果没有,并且errno(从标题<cerrno>设置为值EACCES[是,使用一个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;
}
Run Code Online (Sandbox Code Playgroud)
Iostreams的工作方式会有所不同.AFAIK,他们不保证errno在两个平台上设置,或报告更多特定错误而不仅仅是"失败".
正如Jerry Coffin所写,不要依赖单独的访问测试功能,因为您的程序将容易出现竞争条件和安全漏洞.
关于唯一合理的事情是尝试创建文件,如果失败,告诉用户有问题.任何提前测试的尝试,并且只有在你能够创建并写入文件时才尝试创建文件,这对于竞争条件下的问题是开放的(当你检查时有权限,但是当你尝试时它被删除了使用它,反之亦然)和极端情况(例如,您有权在该目录中创建文件,但尝试在那里写入将超过您的磁盘配额).要知道的唯一方法是尝试......
| 归档时间: |
|
| 查看次数: |
9091 次 |
| 最近记录: |