Pfade in TTreeView parsen



  • Hallo zusammen,
    Ich weiß das es dieses Thema schon oft gab, aber bei mir siehst das ganze aber etwas anders aus.
    Ich arbeite mit *.grf Datein, diese Datei enthält wiederum files die in Ordner gegliedert sind. Wenn ich die Datei jetzt also auslese bekomme ich von jedem file innerhalb der grf einen absoluten Pfad als String.
    Ich möchte die Pfade und Files als Nodes in einem TTreeView darstellen.
    Ich hatte geplant den String mit dem absoluten Pfad zu unterteilen und die Ordner und das file einzelnt als Nodes zu erstellen.
    Jetzt habe ich aber das Problem das Ordner mit dem selben Namen ja mehrmals vorkommen können. Also müsste ich vorher suchen ob es den genannten Ordner bereits als Node gibt. Wobei es gleichnamige Ordner auf verschiedenen leveln des TreeView geben kann was die Suche wieder etwas komplizierter gestaltet.
    Ich habe es mit folgender Methode versucht nach schon vorhandenen Nodes zu suchen:

    TTreeNode *TGrfForm::search(int level, String strsearch) {
     TTreeNode *node = tvGrf->Items->GetFirstNode();
    
     while(node != NULL) {
           if(node->Level == level)
              if(node->Text == strsearch)
                 return node;
    
           node = node->GetNext();
     }
    
     return NULL;
    }
    

    Meine test.grf Datei hat ca 6900 Einträge die jeweils im Durchschnitt ca 5 Ordner haben. Der Aufwand steigt so rapide an das man stundenlang warten müsste.
    Auch bei dem Versuch nur auf einem level zu suchen bin ich gescheitert, da man teilweise sehr viele nodes auf verschiedenen leveln ersteinmal durchgehen muss um überhaupt auf das gewünschte Leven zu kommen. Auch das dauert viel zu lange.
    Kennt irgendjemand einen effektiven Weg an mein Ziel zu kommen und könnte mir einen kleinen Anstoß in die richtige Richtung geben?

    mfg

    Tsurai



  • Wieso gehst Du nicht einfach die Baumstruktur entlang? Trenne den obersten Ordner ab und schaue, ob er bereits vorhanden ist, in dem Du den Ordnernamen mit allen Kindsknoten des Wurzelknotens vergleichst. Hast Du ihn gefunden dann betrachte ihn als neuen Wurzelknoten, dessen Kinder Du mit dem nächsten Ordner vergleichst. So kannst Du alle Dateien einsortieren.

    Und vergiß nicht case-insensitiv zu prüfen, wenn es ein Windows-Filesystem ist.


Anmelden zum Antworten