Fonction stat

Fermé
Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017 - Modifié le 19 avril 2017 à 02:04
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 21 avril 2017 à 13:17
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 .
A voir également:

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
19 avril 2017 à 05:53
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
Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017 9
21 avril 2017 à 00:31
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017
21 avril 2017 à 13:17
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