Leggere le directory con dirent.h

di Anonimizzato15324 il
8 risposte
Salve, ho un piccolo problema con la libreria dirent.
Questo e' il mio codice:

    DIR *currentDirectory;
    string directory;
    struct dirent *pent;
    pent  = NULL;
    currentDirectory = NULL;
    
   /...
   
   currentDirectory = opendir(".");
        if(currentDirectory == NULL)
        {
            cout <<"Error: Can't open the current directory!" <<endl;
            exit(1);
        }
        while (pent = readdir (currentDirectory)) // while there is still something in the directory to list
        {
            directory = pent->d_name; //Preferisco aver il nome in forma di stringa (in futuro tutti i nomi dei file 
                                               	    //verranno salvati in un vettore di stringhe)
            cout <<directory <<endl;
        }
          closedir (currentDirectory);
    
    
    
Funziona quasi tutto perfettamente, il problema e' che legge solo i files, le due directory (che nel file progetto sono "bin" e "object") le legge rispettivamente "." e "..". Ho sbagliato qualcosa?
P.s. Potrei farne a meno, ma non ci riesco... Su Internet ho provato a cercare informazioni su cosa sia esattamente una variabile "struct dirent" (credo sia un puntatore al nome della directory...?), l'operatore "->" e il "d_name", ma non ho trovato quasi nulla di chiaro... Qualche buona anima potrebbe spiegarmelo?

8 Risposte

  • Ho notato solo ora che le cartelle "bin" e "obj" effettivamente sono nella lista. Pero' quei punti restano... o.O
  • . e .. sono due directory del file system. Rappresentano la directory corrente e la directory padre della corrente.

    Sono concetti di base dei sistemi operativi (file system).
  • Si, fin lì ero arrivato, ma perche' le conta come directory dentro la directory corrente?

    ("cd .." o "./programma" aiutano a capire come funzionano le directory, sopratutto se devono essere usati obbligatoriamente )
  • Le conta perché esistono !
  • Come fa ad esistere la cartella dentro la stessa cartella? Magari la sottodirectory ha anche senso, ma non vedo perche' mettere la cartella "." ...
  • Grazie, cerchero' di capire quello che c'e' scritto nel link.
    Sai consigliarmi qualche buon libro che parla degli OS?
  • Il classico

    I moderni sistemi operativi
    di Andrew S. Tanenbaum
Devi accedere o registrarti per scrivere nel forum
8 risposte