Подтвердить что ты не робот

С++ как удалить имя файла из строки пути

У меня

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

как преобразовать это в

"..\somepath\somemorepath"

?

4b9b3361

Ответ 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;

Это решение работает как с прямой, так и с обратной связью.

Ответ 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