Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:如何检查文件/目录是否可读?(PHP等价物:可读) 我试图用C++来验证一个目录。_C++_Linux_Boost_Filesystems - Fatal编程技术网

C++;:如何检查文件/目录是否可读?(PHP等价物:可读) 我试图用C++来验证一个目录。

C++;:如何检查文件/目录是否可读?(PHP等价物:可读) 我试图用C++来验证一个目录。,c++,linux,boost,filesystems,C++,Linux,Boost,Filesystems,bool是可读的(字符串$filename) 说明文件(或directroy)是否存在且可读。 在C++中,上述等价物是什么? 我已经在使用boost/filesystem库检查目录是否存在。 我已经检查了文档: 但是我找不到PHP的等价物is_readable() 如果boost/文件系统库无法实现,您会使用什么方法?大多数操作系统都提供stat() 因为您已经将问题标记为“Linux”,所以有一个POSIX函数来检查当前进程的用户是否可以读取/写入/执行文件。请参见man 2访问 int

bool是可读的(字符串$filename)
说明文件(或directroy)是否存在且可读。 <>在C++中,上述等价物是什么?

我已经在使用boost/filesystem库检查目录是否存在。 我已经检查了文档:

但是我找不到PHP的等价物is_readable()


如果boost/文件系统库无法实现,您会使用什么方法?

大多数操作系统都提供stat()

  • 因为您已经将问题标记为“Linux”,所以有一个POSIX函数来检查当前进程的用户是否可以读取/写入/执行文件。请参见
    man 2访问

    int access(const char *pathname, int mode);
    
    比如说,

    if (-1 == access("/file", R_OK))
    {
        perror("/file is not readable");
    }
    
  • 或者,如果您需要可移植性,请尝试实际打开文件进行读取(例如,
    std::ifstream
    )。如果成功,则文件可读。同样,对于目录,请使用
    boost::filesystem::directory\u迭代器
    ,如果成功,则目录是可读的


  • 谢谢一个快速跟进问题:我没有安装相关的手册页(“第2节中没有手动输入访问”)。你知道要在Debian/Kubuntu上安装的包名吗?不管怎样,正确的方法是2号,如果access返回成功,你不能保证当你开始读取时它仍然可读it@jk是的,如果您稍后尝试打开它,则始终可能存在TOCTOU race条件,但它适用于一次性报告目的是的,在这种情况下,我实际上不想读取任何内容,而是在保存设置之前检查目录是否可读。