c ++如何从路径字符串中删除文件名

时间:2012-04-28 15:23:18

标签: c++ string filesystems

我有

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

如何将其转换为

"..\somepath\somemorepath"

5 个答案:

答案 0 :(得分:40)

最简单的方法是使用std::string

find_last_of成员函数
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;

此解决方案适用于正斜杠和反斜杠。

答案 1 :(得分:8)

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

答案 2 :(得分:5)

在Windows 8上,使用可在Pathcch.h

中找到的PathCchRemoveFileSpec

PathCchRemoveFileSpec将删除路径中的最后一个元素,因此如果将目标路径传递给它,最后一个文件夹将被删除。
如果您想避免这种情况,并且不确定文件路径是否是目录,请使用PathIsDirectory

PathCchRemoveFileSpec在包含转发斜杠的路径上的行为不正常。

答案 3 :(得分:3)

使用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
}

答案 4 :(得分:0)

PathRemoveFileSpec(...),您不需要Windows 8。 您将需要包含Shlwapi.h和Shlwapi.lib 但是它们是winapi,因此您不需要任何特殊的SDK