С++ как удалить имя файла из строки пути
У меня
const char *pathname = "..\somepath\somemorepath\somefile.ext";
как преобразовать это в
"..\somepath\somemorepath"
?
Ответы
Ответ 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;
Это решение работает как с прямой, так и с обратной связью.
Ответ 2
В Windows используйте _splitpath()
, а в Linux - dirname()
Ответ 3
В Windows 8 используйте PathCchRemoveFileSpec
, который можно найти в Pathcch.h
PathCchRemoveFileSpec
удалит последний элемент в пути, поэтому, если вы передадите ему путь к каталогу, последняя папка будет удалена.
Если вы хотите избежать этого и не уверены, является ли путь к файлу каталогом, используйте PathIsDirectory
PathCchRemoveFileSpec
не работает должным образом на путях, содержащих прямые косые черты.
Ответ 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
}
Ответ 5
PathRemoveFileSpec (...) вам не нужно Windows 8 для этого.
вам нужно будет включить Shlwapi.h и Shlwapi.lib
но они winapi, так что вам не нужен специальный SDK