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

How to split a path into separate strings?

本文关键字:单独 字符串 拆分 路径      更新时间:2023-10-16

这是一个免费问题:
如何建立一个完整的路径字符串(安全)从单独的字符串?

那么我的问题是,如何以跨平台的方式将路径分割成单独的字符串。

这个解决方案,使用Boost。Filesystem非常优雅,Boost一定实现了一些splitPath()函数。我找不到。

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

确实有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

无需担心移动部件

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;
}

如果您没有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());
}

如果您想手动完成所有操作而不使用任何库,那么这将会有所帮助。它将给定的完整路径拆分为相应的名称,并将它们存储在vector中。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string filePath = "C:\ProgramData\Users\CodeUncode\Documents";
    vector<string> directories;
    size_t position=0, currentPosition=0;
    
    while(currentPosition != -1)
    {
        currentPosition = filePath.find_first_of('', position);
        directories.push_back(filePath.substr(position,currentPosition-position));
        position = currentPosition+1;
    }
    for(vector<string>::iterator it = directories.begin(); it!=directories.end(); it++)
        cout<<*it<<endl;
    return 0;
} 
输出:

C:
ProgramData
Users
CodeUncode
Documents