【问题标题】:boost::filesystem::exists crashsboost::filesystem::exists 崩溃
【发布时间】:2013-03-10 17:03:07
【问题描述】:

当我试图从我没有读取权限的网络驱动器中获取文件时,我正在使用 boost 1.52。使用boost::filesystem::exists(fileName) 后出现异常
有没有比在每个地方都做try, catch 更好的工作?

我现在已切换回旧代码:

bool FileExists(const char* fileName)
{
    struct stat my_stat;
    return (stat(fileName, &my_stat) == 0);
}

//boost Exists throws exception if there are no permissions for share folder
bool FileExists(const std::string& fileName)
{
    return FileExists(fileName.c_str());
}

【问题讨论】:

  • 你不能只使用你现在使用的函数,用boost::filesystem::exists 替换stat 以及必要的异常处理吗?然后你不必在每个地方都使用 try-catch 。它在那个函数中是孤立的。

标签: c++ boost boost-filesystem


【解决方案1】:

使用不抛出的overload。

bool exists(const path& p, system::error_code& ec) noexcept;

但是,您需要检查输出参数,因此这可能比捕获异常更有效。这取决于您要完成的工作。

【讨论】:

  • 我只是想获取一个配置文件。我想在开始解析它之前检查它是否存在,以及我是否有权从网络驱动器读取它
  • 你是否意识到这个想法的内在竞争条件?该文件可以在存在返回后但在您解析它之前被删除。
  • 是的,但它是一个简单的系统。并且用户都知道这个问题。我想在这里解决的另一个问题是权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 2010-11-06
  • 1970-01-01
  • 2011-02-22
  • 2011-01-13
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多