mamC++ jak usunąć pliku z ciąg ścieżki
const char *pathname = "..\somepath\somemorepath\somefile.ext";
jak przekształcić to pod
"..\somepath\somemorepath"
?
mamC++ jak usunąć pliku z ciąg ścieżki
const char *pathname = "..\somepath\somemorepath\somefile.ext";
jak przekształcić to pod
"..\somepath\somemorepath"
?
Najprostszym sposobem jest użycie find_last_of
funkcji składowej 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;
To rozwiązanie działa zarówno z przodu i do tyłu ukośniki.
Działa, zakładając, że użytkownik nigdy nie umieszcza, w zależności od tego, które zaciek jest legalne w swoich nazwach plików – Potatoswatter
działa dla mnie :) dzięki! – Mat
Nie działa dla mnie, ale to zrobiło http://stackoverflow.com/questions/8518743/get-directory-from-file-path-c – brad
użyć strrchr()
, aby znaleźć ostatni ukośnik odwrotny i usunąć ciąg.
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
}
Co jeśli jest to ukośnik ('/')? – Cameron
W Windows użyć _splitpath()
i Linux używać dirname()
W Windows 8, użyj PathCchRemoveFileSpec
które można znaleźć w Pathcch.h
PathCchRemoveFileSpec
usunie ostatni element w ścieżce, więc jeśli przejdą mu ścieżkę do katalogu, w ostatnim folderze zostaną usunięte.
Jeśli chcesz tego uniknąć, i nie masz pewności, czy ścieżka do pliku jest katalogiem, użyj PathIsDirectory
PathCchRemoveFileSpec
nie zachowuje się zgodnie z oczekiwaniami na ścieżkach zawierających przodu ukośniki.
Tylko na Windows 8 – Liviu
Boost ma ładną klasę 'filesystem :: path' ... – Cameron