Funktion, um Dateipfade/Namen vernünftig zu sortieren



  • Hallo, ich habe ein Programm geschrieben, mit dem ich alle Dateien in sämtlichen Unterordnern eines bestimmten Pfades auflisten kann. Die Klasse dafür sieht ungefähr so aus:

    class datei
    {
       public: //zur Veranschaulichung
    
        std::string path; //zB.: "C:\\test"
        std::string name; //zB.: "Neues Textdokument.txt"
    };
    

    Die Dateien lese ich alle in einen vector ein:

    std::vector<datei> MeineDateien;
    

    Mein Ziel ist es jetzt, die Dateien im vector so anzuordnen, wie sie im "Datei-Baum" des Explorers von oben nach unten angezeigt würden.
    Mein erster Ansatz sah so aus:

    bool pred(const datei& a, const datei& b)
    {
        if(a.path==b.path)
            return a.name<b.name;
        if(b.path.find(a.path)!=std::string::npos)
            return false;
        if(a.path.find(b.path)!=std::string::npos)
            return false;
        return true;
    }
    //...
    sort(MeineDateien.begin(), MeineDateien.end(), pred);
    

    Das scheint aber nicht richtig zu funktionieren, denn in der sortieren Liste kommen ab und zu solche Einträge zu Stande:

    C:\A\B\C        Datei 1
    C:\A\B\C        Datei 2
    C:\A\B          Datei x  //sollte eigentlich weiter oben stehen
    C:\A\B\C        Datei 3
    

    Fällt jemand eine bessere Methode ein, die Elemente des vectors zu sortieren? Ich hoffe ihr versteht das Problem 😃



  • bool pred(const datei& a, const datei& b)
    {
        if(a.path!=b.path)
            return a.path<b.path;
        retirn a.name<b.name;
    }
    


  • manchmal kann die Lösung so einfach sein... Danke 😃


Anmelden zum Antworten