Passage en récurssif d'un programme en C
Fermé
nairolff
Messages postés
4
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
10 septembre 2009
-
30 avril 2009 à 15:11
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 mai 2009 à 08:39
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 mai 2009 à 08:39
A voir également:
- Passage en récurssif d'un programme en C
- Programme demarrage windows 10 - Guide
- Passage qwerty azerty - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
6 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 avril 2009 à 15:23
30 avril 2009 à 15:23
Je te conseil pour la récursivité de faire déjà une fonction qui prend en argument un dossier et qui sort une liste de fichier.
Ensuite, il ne te restera plus qu'à appeler la fonction depuis la fonction avec en argument tout les répertoires trouver. Et ne pas oublier de faire une condition de sortie.
Ensuite, il ne te restera plus qu'à appeler la fonction depuis la fonction avec en argument tout les répertoires trouver. Et ne pas oublier de faire une condition de sortie.
nairolff
Messages postés
4
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
10 septembre 2009
30 avril 2009 à 15:46
30 avril 2009 à 15:46
Merci beaucoup !
Je vais essayer, mais je ne comprend pas : dans ma fonction je dois mettre en entrée un type "dossier" ? ça existe?
Je vais essayer, mais je ne comprend pas : dans ma fonction je dois mettre en entrée un type "dossier" ? ça existe?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 avril 2009 à 16:10
30 avril 2009 à 16:10
pas forcément de "type" dossier, mais déscrivant le dossier, typiquement, une chaine de caractère.
En algo, ça donne :
En algo, ça donne :
fonction listage_f(dossier_v,liste_v) ajouter à liste_v la liste des fichiers présent dans dossier_v pour chaque sdossier, contenu dans dossier_v listage_f(sdossier,liste_v) fin fonction
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
30 avril 2009 à 17:29
30 avril 2009 à 17:29
Salut,
Dans ta boucle while conditionnée par FindNextFile, tu testes si l'élément est un fichier ou un répertoire.
Dans ta boucle while conditionnée par FindNextFile, tu testes si l'élément est un fichier ou un répertoire.
if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { //c'est un répertoire, donc tu peux relancer ta fonction sur ce répertoire. } else { //sinon si c'est un fichier .txt, tu affiches. } Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
--------------------------------------------------------------------------------
Bonjour,
Je suis toujours sur le même problème...
Pour simplifier, je souhaite afficher tous les fichiers (dossiers ou non) à partir d'un répertoire racine.
J'ai essayer d'introduire la récurssivité, mais mon programme ne fonctionne pas : je pense que c'est du au fait que mon "path" est toujours le même à chaque fois que la fonction est appelée.... mais je dois avouer que je m'y perd un peu.
Est-ce-que quelqu'un peut me donner un petit coup de pouce ?
Merci
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define path "C:\\Documents and Settings\\Florian\\Mes documents\\les truc a moi\\epf\\3A\\LanguageC"
#define anti "\\"
// Prototype de la fonction
void RechArborescence(HANDLE hfind);
//____________________Programme principal___________________________________
int main(int argc, char *argv[])
{
// Déclaration des variables
HANDLE hfind;
WIN32_FIND_DATA wfd;
hfind = FindFirstFile(path, &wfd); // Répertoire racine
RechArborescence(hfind);
system("PAUSE");
return 0;
}
//______________Définition de la fonction________________________________
void RechArborescence(HANDLE hfind)
{
// Déclaration des variables
WIN32_FIND_DATA wfd;
if (hfind != INVALID_HANDLE_VALUE)
{
do
{
if (wfd.cFileName[0] != '.')
{
// vérifie si c'est un répertoire ou non
if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
printf("c'est un dossier : ");
printf ("%s\n", wfd.cFileName);
// c'est la qu'on introduit notre récursivité
strcat(path,anti);
strcat(path,wfd.cFileName);
RechArborescence(SetCurrentDirectory(path));
}
printf ("%s\n", wfd.cFileName);
}
}while (FindNextFile(hfind, &wfd));
// Recherche terminer, ferme la recherche
FindClose(hfind);
printf ("Recherche terminee\n");
}
else
{
printf ("Aucun fichier trouve\n");
}
}
Bonjour,
Je suis toujours sur le même problème...
Pour simplifier, je souhaite afficher tous les fichiers (dossiers ou non) à partir d'un répertoire racine.
J'ai essayer d'introduire la récurssivité, mais mon programme ne fonctionne pas : je pense que c'est du au fait que mon "path" est toujours le même à chaque fois que la fonction est appelée.... mais je dois avouer que je m'y perd un peu.
Est-ce-que quelqu'un peut me donner un petit coup de pouce ?
Merci
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define path "C:\\Documents and Settings\\Florian\\Mes documents\\les truc a moi\\epf\\3A\\LanguageC"
#define anti "\\"
// Prototype de la fonction
void RechArborescence(HANDLE hfind);
//____________________Programme principal___________________________________
int main(int argc, char *argv[])
{
// Déclaration des variables
HANDLE hfind;
WIN32_FIND_DATA wfd;
hfind = FindFirstFile(path, &wfd); // Répertoire racine
RechArborescence(hfind);
system("PAUSE");
return 0;
}
//______________Définition de la fonction________________________________
void RechArborescence(HANDLE hfind)
{
// Déclaration des variables
WIN32_FIND_DATA wfd;
if (hfind != INVALID_HANDLE_VALUE)
{
do
{
if (wfd.cFileName[0] != '.')
{
// vérifie si c'est un répertoire ou non
if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
printf("c'est un dossier : ");
printf ("%s\n", wfd.cFileName);
// c'est la qu'on introduit notre récursivité
strcat(path,anti);
strcat(path,wfd.cFileName);
RechArborescence(SetCurrentDirectory(path));
}
printf ("%s\n", wfd.cFileName);
}
}while (FindNextFile(hfind, &wfd));
// Recherche terminer, ferme la recherche
FindClose(hfind);
printf ("Recherche terminee\n");
}
else
{
printf ("Aucun fichier trouve\n");
}
}
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
4 mai 2009 à 08:39
4 mai 2009 à 08:39
Et ça compile ???
Je suis étonné, à moins que je me trompe dans la fonction strcat. Mais dans tout les cas, il est logique que ça ne fonctionne pas.
Une bonne habitude de programmation (confirmé par l'expérience) est d'éviter un maximum c'est putain de macro ! C'est à dire que si tu peux faire autrement, fait le.
Donc, à la place de "#define path" tu mets "const char* path", et là peut être que ça fonctionnera (si ça ne fonctionne pas, il y a un problème ailleurs)
Il faut bien comprendre que les macro ce n'est que du traitement de texte, lorsque tu écris #define a b le préprocesseur remplacera AVANT compilation toutes les occurrences de "a" par "b" dans le source.
si tu veux vérifier, tu tape "gcc -E nomfichier.c" et tu verra à quoi ressemble ton code source.
Je suis étonné, à moins que je me trompe dans la fonction strcat. Mais dans tout les cas, il est logique que ça ne fonctionne pas.
Une bonne habitude de programmation (confirmé par l'expérience) est d'éviter un maximum c'est putain de macro ! C'est à dire que si tu peux faire autrement, fait le.
Donc, à la place de "#define path" tu mets "const char* path", et là peut être que ça fonctionnera (si ça ne fonctionne pas, il y a un problème ailleurs)
Il faut bien comprendre que les macro ce n'est que du traitement de texte, lorsque tu écris #define a b le préprocesseur remplacera AVANT compilation toutes les occurrences de "a" par "b" dans le source.
si tu veux vérifier, tu tape "gcc -E nomfichier.c" et tu verra à quoi ressemble ton code source.