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