使用Boost.Filesystem获取平台的路径分隔符

时间:2011-12-05 11:17:39

标签: c++ boost boost-filesystem

有没有办法使用Boost.Filesystem获取平台的路径分隔符?通过路径分隔符,我的意思是Unix的/和Windows的\

我已经知道我可以使用boost::filesystem::path::operator/将两个路径与适当的分隔符连接起来。但我只想要/\

我也知道我可以使用#ifdef _WIN32,但我更喜欢Boost.Filesystem告诉我合适的分隔符。

编辑: 我想使用Boost.Filesystem API的version 3,如Boost 1.48中所用。

3 个答案:

答案 0 :(得分:13)

似乎boost::filesystem::path::make_preferred是票证:

  

效果:包含的路径名将转换为首选本机   格式。 [注意:在Windows上,效果是用斜杠替换斜杠   反斜杠。在POSIX上,没有任何效果。 - 结束说明]

示例:

namespace bfs = boost::filesystem;
bfs::path slash("/");
bfs::path::string_type preferredSlash = slash.make_preferred().native();

答案 1 :(得分:9)

从版本1.57开始,Boost现在有了一个更好的解决方案,它只是常数char / wchar_t(取决于不同的平台):boost::filesystem::path::preferred_separator

阅读http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examples了解详情。它还有更多与系统相关的功能。

简单示例:

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::path::preferred_separator << std::endl;
}

答案 2 :(得分:1)

没有对此进行测试,但看起来您应该能够在最近的提升中使用它:

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::slash<boost::filesystem::path>::value << std::endl;
}