我正在从数据库中读取路径名,这些路径名以 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/