Möglichst einfach den letzten Slash entfernen



  • Gibt es eine Möglichkeit in einem boost Path den letzten Slash zu entfernen? Ich bekomme bei einem Path der so aussieht /home/user/test mit boost::filesystem::filename() als Ergebnis test raus, aber wenn der Path so aussieht /home/user/test/ dann ist das Ergebnis leer.

    Kennt da jemand eine Möglichkeit?

    Mir fällt jetzt ein wie ich das mit Strings lösen könnte, aber das wäre ein viel zu großer Aufwand, falls es eine gute Alternative gibt.


  • Mod

    Ist der Pfad "home/bla/test/" wird relative_path() "test/" geben. Gibt aber eigentlich nicht das Ergebnis, das du wolltest. Und wenn der Pfad einen Laufwerksbuchstaben mit Doppelpunkt enthält, funktioniert es nur auf Windows.
    Ansonsten einfach [den String trimmen und] das letzte Zeichen auf einen Slash prüfen.

    Edit: Weißt du, ob es einen Slash gibt, oder nicht?



  • Naja wenn ich auf der Console unter Linux Tab benutze um Verzeichnisse zu vervollständigen, dann hängt er immer einen Slash hinten dran. Dann muss ich wohl extra eine Funktion schreiben die das überprüft und gegebenenfalls den richtigen Pfad zurück gibt.



  • Wenn ein / dranhängt ist es ja auch kein File sondern ein Directory.



  • Kennst du eine andere Möglichkeit um an das letzte Verzeichnis zu kommen? relative_path hat bei mir wohl nicht funktioniert, da ich wohl immer mit absoluten Pfaden arbeite.



  • std::string FixPath(const std::string& str) { return std::string(str.begin(), str.end() - (*(str.end() - 1) == '/')); }
    


  • mit remove_filename() wird der trailing slash entfernt

    Getestet mit boost 1.56.0

    #include <iostream>
    #include <boost/filesystem.hpp>
    
    int main(int argc, char** argv )
    {
        boost::filesystem::path path("first/second/");
    	std::cout<<path<<"\n";
        path.remove_filename();
    	std::cout<<path<<"\n";
        return 0;
    }
    

    Ausgabe:

    "first/second/"
    "first/second"


Anmelden zum Antworten