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(".")
必须成功时失败,这很奇怪。