【问题标题】:boost::file_system::create_directory doesn't create directory, yet ErroCode is SUCCESSboost::file_system::create_directory 没有创建目录,但 ErroCode 是成功的
【发布时间】:2016-10-26 14:38:46
【问题描述】:

所以,我使用了一个简单的代码,比如

boost::system::error_code ec;
if (!boost::filesystem::create_directory(out_path.parent_path(), ec)) {
    std::cerr << "couldn't create directory\n";
    std::cerr << ec.message() << "\n";
    return -1;
}

我正在尝试创建将绝对文件路径传递为out_path 的目录。结果是,我进入 if 分支,并且 ec.message() 返回 Success。 我拥有out_path 目录的所有权利,可以读取、写入、执行任何内容。

我完全生气了。我可以直接从 bash 创建具有相同路径的目录,但我不能使用我编写的 c++ 代码。 但是没有失败,当我以out_path 的形式传递相对传递时,例如“temp”,并且从运行 c++ 程序的位置创建目录。

请帮帮我,我真的不明白这里发生了什么:(

【问题讨论】:

  • “我对 out_path 目录拥有所有权限”我很困惑,out_path 是否存在?
  • 为什么不使用 create_directories 而不是 create_directory?
  • out_path 不存在,但out_path.parent_path() 存在。我还尝试使用 create_directories 与相同的结果 UPD out_path.parent_path().parent_path() 存在,out_path.parent_path() 不存在
  • 那么out_path.parent_path()是存在的,为什么要重新创建呢?
  • 抱歉,我说的不准确。它也不存在。比如说,我有 /A/B/C,那么 out_path 就是 /A/B/C/D/file。我想在/A/B/C下创建D,存在的。

标签: c++ linux boost boost-filesystem


【解决方案1】:

create_directory 返回 false 时,表示它没有创建目录。最可能的原因是该目录已经存在!在这种情况下,它会返回 false,但不会设置 error_code

您问题中的代码假定如果函数返回 false 则发生错误,但这是错误的。 False 只是意味着它没有创建它。

【讨论】:

  • 好的,所以它基本上不会创建目录并且没有给你任何理由?只有 STL 设计天才才能制作这样的 API。
  • 设计来自 Boost,不是 STL,也不是 C++ 标准库,所以请把你的 snark 指向别处。
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2014-07-13
  • 2016-04-07
  • 2021-07-08
相关资源
最近更新 更多