Fonction stat

Jofroy Messages postés 100 Statut Membre -  
Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour ,

J'ai besoin de votre aide s'il vous plait pour la fonction int stat(const char *path, struct stat *buf);
Je n'arrive pas à trouver les fichiers et les répertoires, l'entier n ne s'incremente pas . Voici le code :

#include "header.c"

int main(int argc,char* argv[]){
    
    
    struct stat buffer;//=malloc(sizeof(struct stat));
    DIR* ouverture_repertoire;
    struct dirent* lecture_repertoire;
    
    ouverture_repertoire=opendir("directory");
    
    while( (lecture_repertoire=readdir(ouverture_repertoire))!=NULL ){
        
    if( (strcmp(lecture_repertoire->d_name,"."))!=0 && (strcmp(lecture_repertoire->d_name,".."))!=0  ){
        printf("%s",lecture_repertoire->d_name);
        stat(lecture_repertoire->d_name,&buffer);
            if(S_ISDIR(buffer.st_mode)) n=n+1;
             
        }
           
    }
    
} 


Je vous remercie .

1 réponse

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    lecture_repertoire->d_name est un nom de fichier dans le répertoire relatif "directory" pas un chemin. Les fichiers à analyser ont le nom relatif "directory/" auquel on doit concaténer lecture_repertoire->d_name.

    Inclure un fichier .c, ne pas fermer un répertoire ouvert, et ne pas tester les valeurs de retour des fonctions ne sont pas des bonnes idées.
    0
    1. Jofroy Messages postés 100 Statut Membre 9
       
      Bonjour Dalfab ,Merci pour votre aide ; je reviens apres quelques modifications mais ; c'est pareille .


      #include<stdio.h>
      #include<stdlib.h>
      #include<unistd.h>
      #include<errno.h>
      #include<string.h>
      #define bufsiz 1024
      #include <sys/stat.h>
      #include <dirent.h>

      int i=0;
      int n=0;
      int cpt=0;
      int fermeture_repertoire;
      char* ct;
      char bufer[bufsiz];
      char* arg[bufsiz];
      char buf[bufsiz];
      const char* src="directory/";


      int main(int argc,char* argv[]){


      struct stat buffer;
      DIR* ouverture_repertoire;
      struct dirent* lecture_repertoire;

      ouverture_repertoire=opendir("directory");
      if(ouverture_repertoire==NULL) perror("---Erreur ouverture repertoire---\n");

      while( (lecture_repertoire=readdir(ouverture_repertoire))!=NULL ){
      strcpy(bufer,src);
      if( (strcmp(lecture_repertoire->d_name,"."))!=0 && (strcmp(lecture_repertoire->d_name,".."))!=0 ){

      for(i=0;lecture_repertoire->d_name[i]!='\0';i++){
      buf[i]=lecture_repertoire->d_name[i];
      }
      buf[i+1]='\0';

      ct=buf;
      strcat(bufer,ct);
      arg[cpt]=bufer;
      printf("%s\n",arg[cpt]);

      //Vidage des buffers
      for(i=0;i<bufsiz;i++) bufer[i]='\0';
      for(i=0;i<bufsiz;i++) buf[i]='\0';
      }


      Probleme à ce niveau , aucune incrementation de n quelques soit le type de fichier(fichier regulier / repertoire)

      stat(arg[cpt],&buffer);
      if(S_ISDIR(buffer.st_mode)) n=n+1;
      printf("%d\n",n);
      cpt=cpt+1;


      }

      fermeture_repertoire=closedir(ouverture_repertoire);
      if(fermeture_repertoire<0) perror("---Erreur Fermeture repertoire---\n");

      }
      0
      1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102 > Jofroy Messages postés 100 Statut Membre
         
        Il y a quelque chose de perturbant dans ta stratégie consistant à utiliser plein de variables pour brouiller les pistes, puis tu remplis de zéros ta donnée, puis tu t'en sert!! Comprends-tu ce que fait arg[cpt]=bufer ?
        Je t'encourage à utiliser un debugger et à regarder ce qu'il y a dans tes variables.
        Puis essaie :
        strcpy( bufer , src );
        strcat( bufer , lecture_repertoire->d_name );
        stat( bufer , &buffer );
        0