Для компьютеров с Linux или Unix ОС имеет две функции, связанные с путями и именами файлов.используйте man 3 basename для получения дополнительной информации об этих функциях.Преимущество использования предоставляемых системой функций заключается в том, что вам не нужно устанавливать boost или писать собственные функции.
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
Пример кода со страницы руководства:
char *dirc, *basec, *bname, *dname;
char *path = "/etc/passwd";
dirc = strdup(path);
basec = strdup(path);
dname = dirname(dirc);
bname = basename(basec);
printf("dirname=%s, basename=%s\n", dname, bname);
Из-за неконстантного типа аргумента функции basename (), это немного непросто, используя это внутри кода C ++.Вот простой пример из моей базы кода:
string getFileStem(const string& filePath) const {
char* buff = new char[filePath.size()+1];
strcpy(buff, filePath.c_str());
string tmp = string(basename(buff));
string::size_type i = tmp.rfind('.');
if (i != string::npos) {
tmp = tmp.substr(0,i);
}
delete[] buff;
return tmp;
}
Использование new / delete - это не очень хороший стиль.Я мог бы поместить его в блок try / catch на случай, если что-то случится между двумя вызовами.