Fonction stat
Jofroy
Messages postés
82
Date d'inscription
Statut
Membre
Dernière intervention
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 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 :
Je vous remercie .
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:
- Forf p.stat web
- Fonction si et - Guide
- Windir stat - Télécharger - Gestion de fichiers
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
1 réponse
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.
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.
#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");
}
Je t'encourage à utiliser un debugger et à regarder ce qu'il y a dans tes variables.
Puis essaie :