C ++如何从路径字符串中删除文件名(c++ how to remove filename from

2019-06-24 01:00发布

我有

const char *pathname = "..\somepath\somemorepath\somefile.ext";

如何变换成

"..\somepath\somemorepath"

Answer 1:

最简单的方法是使用find_last_of的成员函数std::string

string s1("../somepath/somemorepath/somefile.ext");
string s2("..\\somepath\\somemorepath\\somefile.ext");
cout << s1.substr(0, s1.find_last_of("\\/")) << endl;
cout << s2.substr(0, s2.find_last_of("\\/")) << endl;

该解决方案可工作在前进和后退斜线。



Answer 2:

在Windows上使用_splitpath()和Linux上使用dirname()



Answer 3:

在Windows 8中,使用PathCchRemoveFileSpec它可以发现Pathcch.h

PathCchRemoveFileSpec将在路径中删除最后一个元素,所以如果你传递的目录路径,最后一个文件夹将被剥离。
如果你想避免这种情况,你是不确定的,如果文件路径是一个目录,使用PathIsDirectory

PathCchRemoveFileSpec含前锋斜线路径没有按预期的行为。



Answer 4:

使用strrchr()找到最后一个反斜杠和带钢的字符串。

char *pos = strrchr(pathname, '\\');
if (pos != NULL) {
   *pos = '\0'; //this will put the null terminator here. you can also copy to another string if you want
}


文章来源: c++ how to remove filename from path string