boost :: filesystem - 如何在posix平台上从windows路径字符串创建一个boost路径?

时间:2010-06-02 13:09:14

标签: c++ boost filesystems

我正在从数据库中读取路径名,这些路径名以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)”的解决方案?

3 个答案:

答案 0 :(得分:3)

不幸的是,Windows路径语法是有条件编译的,仅在Windows上编译时才包含。我不明白为什么他们这样做了。无论如何,这意味着您最多可以使用两个解析器;便携式的,与Posix相同,本机的,取决于您当前正在编译的平台。

“正常工作”的原因是所有路径都以便携式(Posix)格式存储。你可以在所有平台上简单地解析它。

答案 1 :(得分:2)

如何用斜杠替换反斜杠?

答案 2 :(得分:1)

查看头文件,我看到如果你定义BOOST_WINDOWS_PATH(在包含头文件之前),它会在Windows路径算法中编译。我不知道它是否在Windows之外工作。