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(".")必须成功时失败,这是奇怪的.
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |