如何将路径拆分为单独的字符串?

时间:2014-07-14 10:36:44

标签: c++ boost path split cross-platform

这是一个免费的问题:
How to build a full path string (safely) from separate strings?

所以我的问题是,如何以跨平台的方式将路径拆分为单独的字符串。

这个solution,使用Boost.Filesystem非常优雅,Boost必须实现一些splitPath()函数。我找不到任何。

注意: 请记住,我自己可以完成这项任务,但我对封闭的盒子解决方案更感兴趣。

3 个答案:

答案 0 :(得分:10)

确实有path_iterator。但如果你想要优雅:

#include <boost/filesystem.hpp>

int main() {
    for(auto& part : boost::filesystem::path("/tmp/foo.txt"))
        std::cout << part << "\n";
}

打印:

"/"
"tmp"
"foo.txt"

    for(auto& part : boost::filesystem::path("/tmp/foo.txt"))
        std::cout << part.c_str() << "\n";

打印

/
tmp
foo.txt

无需担心移动部件

答案 1 :(得分:5)

std::vector<std::string> SplitPath(const boost::filesystem::path &src) {
    std::vector<std::string> elements;
    for (const auto &p : src) {
        elements.emplace_back(p.filename());
    }
    return elements;
}

答案 2 :(得分:1)

如果您没有C ++ 11 auto,或者正在编写跨平台代码,其中boost :: filesystem :: path可能是std :: wstring:

std::vector<boost::filesystem::path> elements;
for (boost::filesystem::path::iterator it(filename.begin()), it_end(filename.end()); it != it_end; ++it) 
{
    elements.push_back(it->filename());
}