有没有办法使用Boost.Filesystem获取平台的路径分隔符?通过路径分隔符,我的意思是Unix的/
和Windows的\
。
我已经知道我可以使用boost::filesystem::path::operator/
将两个路径与适当的分隔符连接起来。但我只想要/
或\
。
我也知道我可以使用#ifdef _WIN32
,但我更喜欢Boost.Filesystem告诉我合适的分隔符。
编辑: 我想使用Boost.Filesystem API的version 3,如Boost 1.48中所用。
答案 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;
}