# récursiviter, lister les répertoires en C++

**URL:** <https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 7:22 UTC](https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385 "2016-02-20T19:22:08Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 7:22 UTC](https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385/1 "2016-02-20T19:22:08Z")

</div>

Hello,  
Merci de me lire,  
excuser l’indentation des commentaires mai le copier coller déconne ☹  
pour le bug c’est simple c’est expliquer aux début du fichier  
noter que je débute,depuis peux que je compile avec g++ j’utilise geany comme éditeur.  
ce code est fonctionnel hormis le fait qu’il ne fait pas ce que je veux:mur:

```auto
#include <iostream>
#include <vector>
#include <string>
#include <dirent.h>
#include <sys/stat.h>
using std::string;

/*
Ce code est destiner a lister le plus rapidement possible.
Les fichier et les répertoire sous linux.
Avec leur attributs aux complet.(pas encore utiliser, ni coder)
*/

/*
Les répertoires ce présente comme ceci.
note: remplacer le ~ par celui de votre utilisateur.
mkdir -p ~/rep_racine/rep1
mkdir -p ~/rep_racine/rep2/sous_rep_2_0
mkdir -p ~/rep_racine/rep2/sous_rep_2_1
mkdir -p ~/rep_racine/rep2/sous_rep_2_2
mkdir -p ~/rep_racine/rep2/sous_rep_2_3
mkdir -p ~/rep_racine/rep3 
mkdir -p ~/rep_racine/rep2/sous_rep_2_3/sous_sous_rep2
* 
le dernier répertoire n'est pas trouver alors que ceux situer dans ~/rep_racine/rep2/ le son
*/ 
 
void Full_Search(std::vector<string> &search_full_path, 
std::vector<string> &search_rep_name, 
std::vector<string> &search_file_name, 
std::vector<string> &stat_info,std::string &transfere); //Prototype Full_Search 

void Full_Search(std::vector<string> &search_full_path,
std::vector<string> &search_rep_name, 
std::vector<string> &search_file_name, 
std::vector<string> &stat_info, std::string &transfere)
{ 

	long number_element; //déclaration, nombre d'element
	std::string source_transfere; //déclaration, provisoire copie les donnée de la variable
	source_transfere = transfere;																	
	number_element = search_full_path.size() -1;
		std::cout << "DEBUG ----------1: " << number_element << " :----------contien----------: "
		 << search_full_path [number_element] << std::endl;
	if (source_transfere != "")
	{
		std::cout << "DEBUG ----------2: " << number_element << " :----------contien----------: " 
		<< search_full_path [number_element] << std::endl;
		int cmb = source_transfere.length();
		if (source_transfere.substr((cmb- 1), cmb) != "/")
		{ 
			source_transfere += "/";
			std::cout << "DEBUG ----------3: source_transfere :----------contien----------: " 
			<< source_transfere << std::endl;
		}
		DIR *InitialRep = opendir(source_transfere.c_str());
		if (InitialRep != NULL)
		{
			struct dirent *SRep;
			while ((SRep = readdir(InitialRep)) != NULL) //tant que le répertoire contient des fichiers
			{
				string FileFound = SRep->d_name; //definir le fichier (dernier répertoir trouver)
				string PathFound = source_transfere + FileFound; // chemin complet
				if (FileFound != "." && FileFound != "..") 
				{	
					source_transfere = PathFound;
						FileFound = FileFound + "/";
						search_full_path.push_back(FileFound);
						++number_element;
						std::cout << "DEBUG ----------4: " << number_element << 
						" :----------contien----------: " << FileFound << std::endl;
						std::cout << "DEBUG ----------5: " << number_element << 
						" :----------contien----------: " << search_full_path [number_element] 
						<< std::endl;
						if (opendir(PathFound.c_str()) != NULL)
						{
							std::cout << "DEBUG ----------6: " << number_element << 
							" :----------contien----------: " << search_full_path [number_element] 
							<< std::endl;
							Full_Search(search_full_path, search_rep_name, 
							search_file_name, stat_info, source_transfere); //apelle recusif pour les sous répertoires bug ?
							std::cout << "DEBUG ----------7: " << number_element 
							<< " :----------contien----------: " << search_full_path [number_element] 
							<< std::endl;
						}
				}
				else //else uniquement pour le debugage,il est possible de le supprimer
				{
					std::cout << "DEBUG ----------8: " << number_element << 
					" :----------contien----------: " << search_full_path [number_element] 
					<< std::endl;
					std::cout << "DEBUG ----------9: " << FileFound << std::endl;
					std::cout << "DEBUG ----------10: " << transfere << std::endl;
					std::cout << "DEBUG ----------11:: " << source_transfere << std::endl;
					
				}
			} //while
		}
		closedir(InitialRep); //fermer le repertoire courant
	}
} //function Full_Search

int main()
{
																									//variable
std::vector<std::string> search_full_path; //retourne un tableau chemin complet de tout les répertoires trouver
std::vector<std::string> search_rep_name; //repertoir seulement,pas encore utilisée
std::vector<std::string> search_file_name; //fichier seulement,pas encore utilisée
std::vector<std::string> stat_info; //information global sur le répertoir ou le dossier,pas encore utilisée
std::string transfere; //variable pour le nom du repertoir en recusiviter, passe en paramettre le répetoire racine.

																									//code
																									
search_full_path.push_back("/home/taz/rep_racine/"); //valeur par defaut,en cour de dévloppment,rarement utiliser
transfere = "/home/taz/rep_racine";
Full_Search(search_full_path, search_rep_name, search_file_name, stat_info,transfere);
std::cout << "nombre d'élément apres execution " << search_full_path.size() << std::endl; //affiche le nombre d'entrée du tableau
	for (long i = 0; i < search_full_path.size(); ++i ) //affiche le contenu du tableaux
    {
    	std::cout << search_full_path[i] << std::endl;
    }
std::cout << "affichage terminer" << std::endl;
return 0;
} // main

```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 7:22 UTC](https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385/2 "2016-02-20T19:22:20Z")

</div>

Ton code est relativement lours à lire. Je mis pencherais quand j’aurais le temps.  
Je te conseil juste deux choses d’une manière générale :  
[ul]  
[li]utilise cerr pour tes afficher de “debugage” ça permet de pouvoir séparer facilement les affichage normaux de ceux qui sont là pour debugguer en lancant ton programme :

```auto

```

[li]utilise gdb quand ça devient un peu compliqué[/li][/ul]

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 7:22 UTC](https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385/3 "2016-02-20T19:22:36Z")

</div>

[quote=“MisterFreez”]Ton code est relativement lours à lire. Je mis pencherais quand j’aurais le temps.  
Je te conseil juste deux choses d’une manière générale :  
[ul]  
[li]utilise cerr pour tes afficher de “debugage” ça permet de pouvoir séparer facilement les affichage normaux de ceux qui sont là pour debugguer en lancant ton programme :

```auto

```

[li]utilise gdb quand ça devient un peu compliqué[/li][/ul][/quote]

Merci pour ta réponse.  
J’attend donc la suite avec impatiences 🙂

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 20, 2016, 7:23 UTC](https://www.debian-fr.org/t/recursiviter-lister-les-repertoires-en-c/19385/4 "2016-02-20T19:23:25Z")

</div>

bon c’est fait j’ai trouver d’ou venais le bug , pour finir j’ai tout recoder, le bug était que je ne distinguai pas les répertoire des fichier du coup sa partait en vrille.
