Suche Datenstruktur für Verzeichnisstruktur eines Dateisystems



  • Hi, ich suche nach einer Dateistruktur die die Verzeichnisstruktur eines Dateisystems mit Wurzel, Verzeichnissen und Unterverzeichnissen aufnehmen und gut verarbeiten kann. Welche Datenstruktur wird da in der Praxis gerne für verwand?



  • boost is your friend:

    boost



  • Danke für die Antwort, aber ich würde es gerne selbst Implementieren. Es dient zum Lernen. Ich glaube Bäume würden dafür in Frage kommen, nur welcher und wie füge ich dann Elemente ein, lösche sie und suche darin? Es muss keine fertige Lösung sein sondern ich brauche nur den Strukturnamen und die Algorithmen in Wortform für der Operationen.

    Edit: Ich glaube ein B-Baum ist das richtige für mich oder?



  • Bäume ist jedenfalls die richtige Richtung.
    Wenn du nicht weit wandern willst, kehrst du bei std::set ein.

    Dann hätten wird da:
    1. Ein Verzeichnis enthält Dateien.
    2. Wenn eine Datei ein Verzeichnis ist, siehe 1.



  • Vermutlich würd ich was eigenes bauen - vll so was in der richtung:

    struct file_or_dir
    {
      file_or_dir* parent;
    
      std::vector<file_or_dir> children;
    
      bool is_file() const
      {
        return children.empty();
      }
      bool is_dir() const
      {
        return !is_file;
      }
    };
    

    bb



  • Wobei dann automatisch ein leeres Verzeichnis eine Datei ist 😉



  • l'abra d'or schrieb:

    Wobei dann automatisch ein leeres Verzeichnis eine Datei ist 😉

    Japp, das war der Plan! *grml*
    Wollte halt das eine new-sparen und nicht extra speichern, was es denn nun ist... ^^
    naja, dann ists eben nen Bsp. wie man es nicht machen sollte... 😉

    bb



  • Eigentlich wäre es so richtig:

    bool is_file() const
    {
        return true;
    }
    

    In UNIX everything is a file 😉



  • unskilled schrieb:

    Vermutlich würd ich was eigenes bauen - vll so was in der richtung:

    struct file_or_dir
    {
      file_or_dir* parent;
    
      std::vector<file_or_dir> children;
    
      bool is_file() const
      {
        return children.empty();
      }
      bool is_dir() const
      {
        return !is_file;
      }
    };
    

    bb

    Ich würde auch was eigenes bauen, aber mit Polymorphie, in der Art:

    class DataStructure
    {
        std::vector<DataStructure *> children;
        public:
        DataStructure();
        virtual ~DataStructure();
    
        virtual bool IsFile() const;
        //GetChildren(), SetChildren(), usw.
    };
    
    class Directory : public DataStructure
    {
        //blah
    };
    
    class File : public DataStructure
    {
        //blah
    };
    

Anmelden zum Antworten