如何使用 C++ 获取 folder/directory 名称,但不是一个文件的路径?特别是 boost::filesystem;
how to use C++ to get the folder/directory name, but not the path of one file? Especially boost::filesystem;
std::string file="C:\folder1\folder2\folder3.txt";
fs::path file_path(file);
fs::path file_dir=file_path.parent_path();// "C:\folder1\folder2";
std::string str_path=file_path.string();
std::string str_dir=file_dir.string();
std:string str_folder=str_path.erase(0,str_dir()+1);// return folder2
这是我用的方法。它对我有用,但看起来很难看。所以我更喜欢寻找 boost::filesystems 或其他优雅的代码。
笔记:
这个问题没有重复,并且与提出的问题 Getting a directory name from a filename 略有不同。我的兴趣是找到文件名而不是整个目录路径。
您也可以使用路径迭代器来查找最后一个目录。不过也不是很漂亮。
示例
boost::filesystem::path p{"/folder1/folder2/folder3.txt"};
boost::filesystem::path::iterator last_dir;
for (auto i = p.begin(); i != p.end(); ++i)
{
if (*i != p.filename())
last_dir = i;
}
std::cout << *last_dir << '\n';
以上代码的输出应该是"folder2"
.
以上代码使用了Unix路径,但Windows路径原理相同
来自
的相同结果
last_dir = p.end();
--last_dir;
--last_dir;
std::cout << *last_dir << '\n';
这个问题是在另一个堆栈 post 中提出的。 Boost filesystem
在你的情况下,你可以这样做。
boost::filesystem::path p("C:\folder1\folder2\folder3.txt");
boost::filesystem::path dir = p.parent_path();
您可以使用 parent_path
删除路径中的最后一个元素,然后使用 filename
获取最后一个元素。
示例:包括 boost/filesystem.hpp 和 iostream
namespace fs = boost::filesystem;
int main()
{
fs::path p ("/usr/include/test");
std::cout << p.parent_path().filename() << "\n";
}
应该打印 "include".
std::string file="C:\folder1\folder2\folder3.txt";
fs::path file_path(file);
fs::path file_dir=file_path.parent_path();// "C:\folder1\folder2";
std::string str_path=file_path.string();
std::string str_dir=file_dir.string();
std:string str_folder=str_path.erase(0,str_dir()+1);// return folder2
这是我用的方法。它对我有用,但看起来很难看。所以我更喜欢寻找 boost::filesystems 或其他优雅的代码。 笔记: 这个问题没有重复,并且与提出的问题 Getting a directory name from a filename 略有不同。我的兴趣是找到文件名而不是整个目录路径。
您也可以使用路径迭代器来查找最后一个目录。不过也不是很漂亮。
示例
boost::filesystem::path p{"/folder1/folder2/folder3.txt"};
boost::filesystem::path::iterator last_dir;
for (auto i = p.begin(); i != p.end(); ++i)
{
if (*i != p.filename())
last_dir = i;
}
std::cout << *last_dir << '\n';
以上代码的输出应该是"folder2"
.
以上代码使用了Unix路径,但Windows路径原理相同
来自
的相同结果last_dir = p.end();
--last_dir;
--last_dir;
std::cout << *last_dir << '\n';
这个问题是在另一个堆栈 post 中提出的。 Boost filesystem
在你的情况下,你可以这样做。
boost::filesystem::path p("C:\folder1\folder2\folder3.txt");
boost::filesystem::path dir = p.parent_path();
您可以使用 parent_path
删除路径中的最后一个元素,然后使用 filename
获取最后一个元素。
示例:包括 boost/filesystem.hpp 和 iostream
namespace fs = boost::filesystem;
int main()
{
fs::path p ("/usr/include/test");
std::cout << p.parent_path().filename() << "\n";
}
应该打印 "include".