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

Hello,
Merci de me lire,
excuser l’indentation des commentaires mai le copier coller déconne :frowning:
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:

#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


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 :

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

[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 :

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

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

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.