c++ - boost::filesystem - 如何在 posix 平台上从 Windows 路径字符串创建 boost 路径?

标签 c++ boost filesystems

我正在从数据库中读取路径名,这些路径名以 Windows 格式存储为相对路径,并尝试在 Unix 系统上从它们创建 boost::filesystem::path 。所发生的情况是构造函数调用将整个字符串解释为文件名。我需要将路径转换为正确的 Posix 路径,因为它将在本地使用。

我在 boost::filesystem 引用中没有找到任何转换函数,也没有通过谷歌找到任何转换函数。难道是我瞎了,有什么明显的解决办法吗?如果没有,你会怎么做?

示例:

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 平台”?

最佳答案

不幸的是,Windows 路径语法是有条件编译的,并且仅在 Windows 上编译时才包含在内。我不明白他们为什么这样做。无论如何,这意味着您始终最多有两个可用的解析器;一种是可移植的,与 Posix 相同,另一种是 native 的,这取决于您当前正在编译的平台。

“有效”的方法是将所有路径都以可移植 (Posix) 格式存储。您可以在所有平台上同样简单地解析它。

关于c++ - boost::filesystem - 如何在 posix 平台上从 Windows 路径字符串创建 boost 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2957923/

相关文章:

security - HTML5 是否允许您在浏览器中与本地客户端文件进行交互

c++ - unordered_map::find() 插入查找的键

c++ - 在函数调用中调用二维矩阵

c++ - 我的二进制搜索有问题吗?

android - 在 Android 上添加的文件夹通过 USB 不可见

database - 文件读/写与数据库读/写

c++ - 单词下的波浪线 (Win32)

c++ - boost::posix_time::from_iso_string 允许错误输入

c++ - 使用 Boost.Log 和 Boost.ASIO 导致崩溃

c++ - 使用后如何使用boost program_options在ARGV中使用/删​​除选项