Für Linux- oder Unix-Computer verfügt das Betriebssystem über zwei Funktionen, die sich mit Pfad- und Dateinamen befassen. Verwenden Sie den Basisnamen man 3, um weitere Informationen zu diesen Funktionen zu erhalten. Der Vorteil der Verwendung der vom System bereitgestellten Funktionen besteht darin, dass Sie keinen Boost installieren oder eigene Funktionen schreiben müssen.
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
Beispielcode aus der Manpage:
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);
Aufgrund des nicht konstanten Argumenttyps der Funktion basename () ist die Verwendung dieses C ++ - Codes etwas unkompliziert. Hier ist ein einfaches Beispiel aus meiner Codebasis:
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;
}
Die Verwendung von new / delete ist kein guter Stil. Ich hätte es in einen Try / Catch-Block stecken können, falls zwischen den beiden Aufrufen etwas passiert wäre.