【问题标题】:C++: How to check if a file/directory is readable? (PHP equivalent: is_readable)C++:如何检查文件/目录是否可读? (PHP 等价物:is_readable)
【发布时间】:2010-08-25 14:11:35
【问题描述】:

我正在尝试使用 C++ 验证目录。

http://php.net/manual/en/function.is-readable.php

bool is_readable ( 字符串 $filename )
判断文件(或目录)是否存在且可读。

在 C++ 中与上述等价的是什么?

我已经在使用 boost/filesystem 库来检查目录是否存在。 我检查了文档:
http://www.boost.org/doc/libs/1_44_0/libs/filesystem/v3/doc/index.htm
但我找不到 PHP 的 is_readable() 等价物。

如果不能使用 boost/filesystem 库,您会使用什么方法?

【问题讨论】:

    标签: c++ linux boost filesystems


    【解决方案1】:
    1. 由于您已将问题标记为“Linux”,因此有一个 POSIX 函数来检查文件是否可由当前进程的用户读取/写入/可执行。见man 2 access

      int access(const char *pathname, int mode);
      

      例如,

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

    【讨论】:

    • 谢谢。一个快速跟进的问题:我没有安装相关的手册页(“第 2 节中没有用于访问的手动条目”)。你知道要在 Debian/Kubuntu 上安装的软件包名称吗?
    • 恕我直言,正确的方法是不。 2 无论如何,如果访问返回成功,您无法保证当您从它读取时它仍然是可读的
    • @jk 是的,如果您稍后尝试打开它,总有可能出现 TOCTOU 竞争条件,但它适用于一次性报告目的(即只需要检查时)。
    • 是的,在这种情况下,我实际上不想读取任何内容,但在保存设置之前检查目录是否可读。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 2012-12-22
      相关资源
      最近更新 更多