如何在c++中从path获取父文件夹



我在linux中使用c++,我想从c++ 14的路径中提取父文件夹。

例如,我有像

这样的路径
/home/abc/fi.mp4

我的期望输出是abc。如何在c++中实现

这是我做的

std::string getFolderName(const std::string &path) {
size_t found = path.find_last_of("/\");
string foldername = ...
return foldername;
}

我相信std::filesystemexperimental版本已经在c++ 14中可用了.

如果它在您的环境中确实可用,您可以使用parent_path()path获取父文件夹。然后,您可以使用filename()方法来提取没有完整路径规范的名称。
要将path转换为std::string,可以使用string()方法。

#include <string>
#include <iostream>
#include <experimental/filesystem>
int main(int argc, char const* argv[])
{
std::string path_str = "/home/abc/fi.mp4";
std::experimental::filesystem::path p = path_str;
std::experimental::filesystem::path parent_p = p.parent_path();
std::experimental::filesystem::path parent_p_fname = p.parent_path().filename();
std::string result_str = parent_p_fname.string();
std::cout << result_str << std::endl;
return 0;
}

输出:

abc

您可以进一步使用parent_path()来爬上层次结构。

<<p>一次strong> c++ 17 ,您可以简单地去掉experimental前缀。

您可能想要这样的内容:

// Returns the path-string without the filename part
std::string getFolderPath(const std::string &path) {
const size_t found = path.find_last_of("/\");
return (found == string::npos) ? path : path.substr(0, found);
}
// Returns only the filename part (after the last slash)
std::string getFileName(const std::string & path) {
const size_t found = path.find_last_of("/\");
return (found == string::npos) ? path : path.substr(found+1);
}

getFolders函数将获得路径中所有文件夹的名称。

#include <vector>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

vector<string> getFolders(const char* path) {
vector<string> folders;
stringstream ss;
int i = 0, k = 0;
char c;
while ((c = *(path + i)) != '') {
if (c != '/'){
ss << c;
++k;
}
else {
if (k > 0){
folders.push_back(ss.str());
ss.str(string());
k = 0;
}
}
++i;
}
return folders;
}
void main()
{
vector<string> folders = getFolders("/home/abc/fi.mp4");
for (auto f : folders){
cout << f << endl;
}
}

最新更新