我正在从数据库中读取路径名,这些路径名以Windows格式存储为相对路径,并尝试在Unix系统上从它们创建boost :: filesystem ::路径。结果是构造函数调用将整个字符串解释为文件名。我需要将路径转换为正确的Posix路径,因为它将在本地使用。
我没有在boost :: filesystem引用中找到任何转换函数,也没有在google中找到。我只是盲目,有明显的解决方案吗?如果没有,你会怎么做?
示例:
std::string win_path("foo\\bar\\asdf.xml");
std::string posix_path("foo/bar/asdf.xml");
// loops just once, as part is the whole win_path interpreted as a filename
boost::filesystem::path boost_path(win_path);
BOOST_FOREACH(boost::filesystem::path part, boost_path) {
std::cout << part << std::endl;
}
// prints each path component separately
boost::filesystem::path boost_path_posix(posix_path);
BOOST_FOREACH(boost::filesystem::path part, boost_path_posix) {
std::cout << part << std::endl;
}
编辑:当然我可以直接替换反斜杠,但对于Windows和Unix平台,是否有“正常工作(tm)”的解决方案?
答案 0 :(得分:3)
不幸的是,Windows路径语法是有条件编译的,仅在Windows上编译时才包含。我不明白为什么他们这样做了。无论如何,这意味着您最多可以使用两个解析器;便携式的,与Posix相同,本机的,取决于您当前正在编译的平台。
“正常工作”的原因是所有路径都以便携式(Posix)格式存储。你可以在所有平台上简单地解析它。
答案 1 :(得分:2)
如何用斜杠替换反斜杠?
答案 2 :(得分:1)
查看头文件,我看到如果你定义BOOST_WINDOWS_PATH(在包含头文件之前),它会在Windows路径算法中编译。我不知道它是否在Windows之外工作。