代码之家  ›  专栏  ›  技术社区  ›  VolkA

文件系统-如何从POSIX平台上的Windows路径字符串创建一个增强路径?

  •  2
  • VolkA  · 技术社区  · 16 年前

    我正在从一个以Windows格式存储为相对路径的数据库中读取路径名,并尝试在UNIX系统上从中创建boost::filesystem::path。发生的是构造函数调用将整个字符串解释为文件名。我需要将路径转换为正确的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平台”呢?

    3 回复  |  直到 8 年前
        1
  •  3
  •   Magnus Hoff    16 年前

    不幸的是,Windows路径语法是有条件编译的,只有在Windows上编译时才包含在内。我不明白他们为什么这么做。无论如何,这意味着您在任何时候都最多可以使用两个解析器:可移植的解析器(与posix的解析器相同)和本机的解析器(取决于您当前编译的平台)。

    “只起作用”的是以可移植(POSIX)格式存储所有路径。您可以在所有平台上同样简单地解析它。

        2
  •  2
  •   Amnon    16 年前

    用斜线代替反斜线怎么样?

        3
  •  1
  •   Amnon    16 年前

    查看头文件,我发现如果您定义boost-windows-path(在包含头文件之前),它会在windows路径算法中编译。我不知道它是否在窗外工作。