jal*_*alf 19
检查文件是否存在的唯一正确方法是尝试打开它.检查文件是否可写的唯一正确方法是尝试打开它进行写入.其他任何事情都是竞争条件.(其他API调用可以告诉你,如果该文件存在刚才,但即使没有,也可能不存在,以后这15纳秒,当您尝试实际打开它,所以他们基本上没用)
但是,如果您想知道文件是否存在而不打开它,只需使用该boost::filesystem::exists功能.但请注意其中存在的巨大缺陷.它不会告诉您文件是否存在,它会告诉您文件是否存在.
所以要小心你如何使用它.不要假设只是因为函数返回true,当您实际尝试打开它时该文件将存在.
如果您需要知道"我能否打开此文件",那么找出答案的唯一方法就是尝试打开它.
我不认为boost文件系统会给你任何有关权限的信息.
我会采用低级方式(对于这种情况,无论如何都非常简单):使用POSIX C API检查文件的存在和权限:使用`stat.
一个例子:
#include <sys/stat.h>
#include <iostream>
int main(int argc, char *argv[])
{
struct stat sb;
if( stat("file", &sb) == -1 ) {
std::cout << "Couldn't stat(). Cannot access file, could assume it doesn't exist" << std::endl;
return 1;
}
std::cout << "Permissions: " << std::oct << (unsigned long) sb.st_mode << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行它:
$ ./stat
Couldn't stat(). Cannot access file, could assume it doesn't exist
$ touch file
$ ./stat
Permissions: 100644
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8025 次 |
| 最近记录: |