什么是最好的方式来检查文件的存在和使用c + +在linux中的文件权限
我使用boost::filesystem::exists()
来检查文件的存在。什么是最好的方式来检查文件的存在和使用c + +在linux中的文件权限
有没有更好的方法来做到这一点?
另外如何找到文件权限?
难道你只是试图用fopen()
打开文件,并检查返回值是否为null
?
(检查是否可以通过更改`mode`参数来进行读或写操作。) – anroesti 2011-02-05 16:50:03
我不认为增强文件系统会给你任何有关权限的信息。
我会去的低水平方式(这是无论如何很简单,对于这种情况下):使用POSIX C API来检查文件的存在和权限:使用`统计。
一个例子:
#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;
}
运行它:
$ ./stat
Couldn't stat(). Cannot access file, could assume it doesn't exist
$ touch file
$ ./stat
Permissions: 100644
这很好,除非它不总是有效。这是一个巨大的激烈竞争条件。如果`stat`说文件存在,那么,如果之后立即删除它?如果权限在您检查的时间和您尝试打开文件的时间之间发生变化,该怎么办? – jalf 2011-02-05 22:05:54
唯一的正确检查文件是否存在的方法是尝试打开它。唯一的正确的检查文件是否可写的方法是尝试打开它进行写入。其他任何事情都是竞赛状况。 (其他API调用可以告诉你,如果该文件刚才存在,但即使没有,也可能不存在,以后这15纳秒,当您尝试实际打开它,所以他们基本上没用)
但是,如果想要知道文件是否存在而不打开它,只需使用boost::filesystem::exists
函数。但请注意其中的缺陷。它不会告诉您文件是否存在,它会告诉您文件是否存在。
所以要小心你如何使用它。不要认为只是因为该函数返回true,该文件将在您实际尝试打开它时存在。
如果您需要知道“我将能够打开此文件”,那么只有的方式才能找出是试图打开它。
使用`boost`时你有什么问题吗? – Naveen 2011-02-05 16:39:59