1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
#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 |
Partager