Signaler

Fonction stat

Posez votre question Jofroy 83Messages postés mercredi 30 juin 2010Date d'inscription 6 mai 2017 Dernière intervention - Dernière réponse le 21 avril 2017 à 13:17 par Dalfab
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 .
Afficher la suite 
Utile
+0
plus moins
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.
Jofroy 83Messages postés mercredi 30 juin 2010Date d'inscription 6 mai 2017 Dernière intervention - 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");

}
Répondre
Dalfab 240Messages postés dimanche 7 février 2016Date d'inscription 15 juin 2017 Dernière intervention - 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 );
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !