boost :: filesystem :: create_directories("。")失败

时间:2017-02-13 08:53:07

标签: c++ boost boost-filesystem working-directory

boost::filesystem::create_directories(".")总是在我的系统上失败。看起来这可能是一个错误,但在阅读文档之后,我并不完全确定。这是一个示例程序:

#include <iostream>
#include <boost/filesystem.hpp>

int main(int argc, char* argv[])
try
{
    namespace fs = boost::filesystem;
    std::cerr << "is_directory: " << fs::is_directory(argv[1]) << '\n';
    std::cerr << "create_directory: " << fs::create_directory(argv[1]) << '\n';
    std::cerr << "create_directories: " << fs::create_directories(argv[1]) << '\n';
}
catch (const std::exception& ex)
{
    std::cerr << ex.what() << '\n';
}

如果我使用参数.(意味着当前目录)运行它,则会打印:

is_directory: 1
create_directory: 0
boost::filesystem::create_directories: Invalid argument

前两行并不令人惊讶:.是一个目录,create_directory()记录在案:

  

创建失败,因为p解析为现有目录不应视为错误。

但第三行让我感到惊讶:create_directories(".")即使存在.也失败了。如果您使用其他名称(如foo),则不会出现此类故障 - 它会很乐意创建该目录,如果已存在则只返回false。

文档可以这样说:

  

效果:通过为不存在的p的任何元素调用create_directory()来建立后置条件。

     

后置条件:is_directory(p)

我们已经预先显示后置条件是真的,为什么它会失败?

编辑:我正在使用Boost 1.63。我现在看到三个月前提交到#34;修复#12495&#34;可能会导致此问题:https://github.com/boostorg/filesystem/commit/216720de55359828c2dc915b50e6ead44e00cd15 - 甚至还包括一个单元测试,要求create_directories(".")必须在create_directory(".")必须成功时失败,这很奇怪。

0 个答案:

没有答案