Parcours de fichiers en C
Résolu
gilles69
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je souhaite créer un code en language C me permettant d'ouvrir un à un les fichiers d'un répertoire. J'utilise pour cela la biblio dirent.h. Le code (simplifié) est le suivant :
Le problème est le suivant : l'ouverture du premier fichier fonctionne. Mais dès le deuxième, INPUT prend NULL et plus aucun fichier ne s'ouvre. Pour vérifier, je vérifie que fichierLu est le bon fichier (par le printf) et cela fonctionne à chaque fois (il m'indique bien les fichiers successifs), mais le fopen ne marche plus dès la deuxième fois et je ne comprends pas pourquoi...
Des explications ?
merci d'avance
Je souhaite créer un code en language C me permettant d'ouvrir un à un les fichiers d'un répertoire. J'utilise pour cela la biblio dirent.h. Le code (simplifié) est le suivant :
int main() { DIR* rep = NULL; struct dirent* fichierLu = NULL; rep = opendir("C:\\Documents and Settings\\labo\\Bureau\\Gilles\\Essai\\Donnees"); if (rep ==NULL) exit (1); fichierLu = readdir(rep); fichierLu = readdir(rep); fichierLu = readdir(rep); FILE* INPUT = NULL; while((fichierLu = readdir (rep)) != NULL) { printf("le fichier lu sapelle '%s' \n", fichierLu->d_name); INPUT = fopen(fichierLu->d_name,"r"); if (INPUT != NULL) { printf("fichier ouvert \n"); fclose(INPUT); } else printf("impossible \n"); } return 0; }
Le problème est le suivant : l'ouverture du premier fichier fonctionne. Mais dès le deuxième, INPUT prend NULL et plus aucun fichier ne s'ouvre. Pour vérifier, je vérifie que fichierLu est le bon fichier (par le printf) et cela fonctionne à chaque fois (il m'indique bien les fichiers successifs), mais le fopen ne marche plus dès la deuxième fois et je ne comprends pas pourquoi...
Des explications ?
merci d'avance
A voir également:
- Parcours de fichiers en C
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Fichiers epub - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
- Wetransfer gratuit fichiers lourd - Guide
2 réponses
Salut.
Là comme ça, je ne vois pas ce qui pose problème. Peut être une spécificité de readdir qui fait que comme tu as accédé au fichier ça change la liste, ou une merde dans le genre.
à tester : stock tout tes fichiers dans un tableau avant de les lire et ouvre les d'après ce tableau.
Moins aléatoire, regarde la valeur que prend la variable d'erreur errno (cf. http://www.manpagez.com/man/3/fopen/ ) tu sera pourquoi fopen a échoué.
Là comme ça, je ne vois pas ce qui pose problème. Peut être une spécificité de readdir qui fait que comme tu as accédé au fichier ça change la liste, ou une merde dans le genre.
à tester : stock tout tes fichiers dans un tableau avant de les lire et ouvre les d'après ce tableau.
Moins aléatoire, regarde la valeur que prend la variable d'erreur errno (cf. http://www.manpagez.com/man/3/fopen/ ) tu sera pourquoi fopen a échoué.
Bonjour,
Vous essayez d'ouvrir le fichier à partir de son nom sans y ajouter le répertoire dans lequel il se trouve c'est là d'où vient le problème
Vous essayez d'ouvrir le fichier à partir de son nom sans y ajouter le répertoire dans lequel il se trouve c'est là d'où vient le problème
fopen prend le nom du fichier avec son repertoire
fopen(c\blabla\fichier.ext,"r")
là vous affichez bien uniquement le nom du fichier fichierLu->d_name avec le printf donc ça donne
fopen(nom_du_fichier_sans_le_repertoire,"r")
edit: essayez avec ça
fopen(c\blabla\fichier.ext,"r")
là vous affichez bien uniquement le nom du fichier fichierLu->d_name avec le printf donc ça donne
fopen(nom_du_fichier_sans_le_repertoire,"r")
edit: essayez avec ça
#include <stdio.h> #include <dirent.h> #include <stdlib.h> #include <string.h> int main() { DIR* rep = NULL; struct dirent* fichierLu = NULL; char PATH[MAX_PATH]; char FNAME[FILENAME_MAX]; strcpy(PATH,"C:\\Documents and Settings\\labo\\Bureau\\Gilles\\Essai\\Donnees"); rep = opendir(PATH); if (rep ==NULL) exit (1); fichierLu = readdir(rep); FILE* INPUT = NULL; while((fichierLu = readdir (rep)) != NULL) { printf("le fichier lu sapelle '%s' \n", fichierLu->d_name); strcpy(FNAME,PATH); strcat(FNAME,"\\"); strcat(FNAME,fichierLu->d_name); INPUT = fopen(FNAME,"r"); if (INPUT != NULL) { printf("fichier ouvert \n"); fclose(INPUT); } else printf("impossible \n"); } return 0; }