Verzeichnisstruktur einlesen



  • Hallo !!

    Seit 3 Tagen furtz ich mit einer Rekursiven Funktion rum, welche meinen kompletten Verzeichnisbaum einlesen bzw. ausgeben soll.
    Irgendwo hackts immer noch, und ich komm einfach net weiter 😡

    Hat wer eine simple Funktion rumliegen die er bitte posten könnte ??
    Simpel insofern, das es jemand der erst seit 3 Monaten mit C programmiert auch versteht 😉

    Danke
    Baboo



  • Poste deine Funktion doch mal!



  • schon einiger Schrott drinnen damit ich sehen kann was passiert ...

    Is übrigens Linux, wird aber in Windows net viel anders sein

    void baum_abstieg(char *pfad)
    {

    DIR *dir;
    struct dirent *dir_info;
    struct stat attribut;
    char dirname[1000];
    char isdir[1000];
    static int tiefe=1;

    chdir(pfad);
    dir=opendir(pfad);
    while((dir_info=readdir(dir))!= NULL)
    {

    if(stat(dir_info->d_name,&attribut)!=-1 && strcmp(dir_info->d_name,"..")!=0 && strcmp(dir_info->d_name,".")!=0)
    if(attribut.st_mode & S_IFDIR )
    {
    if(opendir(dir_info->d_name)!=NULL)
    {
    getcwd(isdir,1000);
    strcpy(dirname,dir_info->d_name);
    fprintf(stdout,"%s/%s\n",isdir,dirname);
    getcwd(isdir,1000);
    strcat(isdir,"/");
    strcat(isdir,dir_info->d_name);
    tiefe++;
    baum_abstieg(isdir);
    }
    }
    }
    if (tiefe>0)
    {
    chdir("..");
    fprintf(stdout,"Pfad: %s, Tiefe: %d\n",isdir,tiefe);
    tiefe--;
    }
    }



  • und ab nach linux



  • Original erstellt von <Baboom>:
    **schon einiger Schrott drinnen damit ich sehen kann was passiert ...

    Is übrigens Linux, wird aber in Windows net viel anders sein

    void baum_abstieg(char *pfad)
    {
    
      DIR *dir;
      struct dirent *dir_info;
      struct stat attribut;    
      char dirname[1000];
      char isdir[1000];
      static int tiefe=1;
    
      chdir(pfad);
      dir=opendir(pfad);
      while((dir_info=readdir(dir))!= NULL)
      {
    
        if(stat/*was macht die Funktion ?*/(dir_info->d_name,&attribut)!=-1 && strcmp(dir_info->d_name,"..")!=0 && strcmp(dir_info->d_name,".")!=0)
          if(attribut.st_mode & S_IFDIR )
          {
            if(opendir(dir_info->d_name)!=NULL)
            {
              getcwd(isdir,1000);
              strcpy(dirname,dir_info->d_name);
              fprintf(stdout,"%s/%s\n",isdir,dirname);
              getcwd(isdir,1000);
              strcat(isdir,"/");
              strcat(isdir,dir_info->d_name);
              tiefe++;
              baum_abstieg(isdir);
            }
          }
      }
      if (tiefe>0)
      {
        chdir("..");
        fprintf(stdout,"Pfad: %s, Tiefe: %d\n",isdir,tiefe);
        tiefe--;
      }
    }
    

    **

    Was passiert denn genau? Welche Dateien includest du und gib mal alle selbst erstellten structs an?!
    Der Code ist nicht unlogisch,erklär mal was passiert!

    [ Dieser Beitrag wurde am 03.04.2003 um 13:43 Uhr von ºgrimmsenº® editiert. ]



  • hoi !!

    Dummheit gehört bestraft, ich bin über verlinkte Verzeichnisse gestolpert, dadurch mit chdir("..") in einem falschen DIR rausgeklettert 😞

    Auf Deine Frage ...

    die Funktion stat() fragt dateiinformationen ab und knallt diese in den struct stat attribut

    struct stat {
    dev_t st_dev; /* device /
    ino_t st_ino; /
    inode /
    mode_t st_mode; /
    protection /
    nlink_t st_nlink; /
    number of hard links /
    uid_t st_uid; /
    user ID of owner /
    gid_t st_gid; /
    group ID of owner /
    dev_t st_rdev; /
    device type (if inode device) /
    off_t st_size; /
    total size, in bytes /
    blksize_t st_blksize; /
    blocksize for filesystem I/O /
    blkcnt_t st_blocks; /
    number of blocks allocated /
    time_t st_atime; /
    time of last access /
    time_t st_mtime; /
    time of last modification /
    time_t st_ctime; /
    time of last change */
    };

    mit if(attribut.st_mode & S_IFDIR ) kannst dann checken ob es ein Verzeichnis, reguläre Datei oder eine Gerätedatei ist.

    Danke für die Angebotene Hilfe, .. hat sich aber somit erledigt.

    sers
    Baboo



  • kennt jmd ein tutorial/buch, wo diese verzeichnis-fumktionen beschrieben sind?

    in meinem buch stand nix dazu, aber ich bräuchte die komplette unterverzeichnisstruktur eines ordners samt dateien (am liebsten so wie ein "dir" unter dos/windows-cmd(is aber linux) in nem array)

    mfg
    Sebastian



  • schau mal unter www.pronix.de ->C-Programmierung->Ansi-C->Punkt20.x

    speziell:
    http://www.pronix.de/C/standard_C/c_programmierung_20_2.shtml#5




Anmelden zum Antworten