hoC++ come rimuovere il nome del file da stringa di percorso
const char *pathname = "..\somepath\somemorepath\somefile.ext";
come trasformarla in
"..\somepath\somemorepath"
?
hoC++ come rimuovere il nome del file da stringa di percorso
const char *pathname = "..\somepath\somemorepath\somefile.ext";
come trasformarla in
"..\somepath\somemorepath"
?
Il modo più semplice è quello di utilizzare find_last_of
funzione di membro della 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;
Questa soluzione funziona con entrambe le barre avanti e indietro.
Funziona partendo dal presupposto che l'utente non inserisca mai alcuna barra nei suoi nomi file. – Potatoswatter
funziona per me :) grazie! – Mat
Non ha funzionato per me, ma questo ha http://stackoverflow.com/questions/8518743/get-directory-from-file-path-c – brad
utilizzare strrchr()
per trovare l'ultima barra rovesciata e rimuovere la stringa.
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
}
E se invece fosse una barra ('/')? – Cameron
Su Windows usano _splitpath()
e su Linux usano dirname()
In Windows 8, utilizzare PathCchRemoveFileSpec
che si trova in Pathcch.h
PathCchRemoveFileSpec
rimuoverà l'ultimo elemento in un percorso, quindi se si passa un percorso di directory, l'ultima cartella sarà spogliato.
Se vuoi evitare questo, e non siete sicuri se un percorso di file è una directory, utilizzare PathIsDirectory
PathCchRemoveFileSpec
non si comporta come previsto su percorsi contenenti avanti barre.
Solo su Windows 8 – Liviu
Boost ha una buona classe 'filesystem :: path' ... – Cameron