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

Joh*_*nck 6 c++ boost working-directory boost-filesystem

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';
}
Run Code Online (Sandbox Code Playgroud)

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

is_directory: 1
create_directory: 0
boost::filesystem::create_directories: Invalid argument
Run Code Online (Sandbox Code Playgroud)

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

由于p解析为现有目录,因此创建失败不应视为错误.

但第三行对我来说是一个惊喜:create_directories(".")即使.存在也失败了.如果你使用不同的名字就没有这样的失败,比如foo- 它会愉快地创建那个目录,或者如果它已经存在则返回false.

文档有这样的说法:

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

后置条件:is_directory(p)

我们事先已经证明后置条件是真的,为什么它会失败呢?

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