|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES
Information sur la source
Description
Programmé sous Linux. Compatible windows. Liste les fichiers d'un répertoire come indiqué dans le titre grâce à la bibliothèque dirent.h Modes : -Récursif (sous répertoires) -Affichage des fichiers cachés (qui commencent par un point) -Filtre d'extensions (n'affiche que les fichiers à l'extension spécifiée) -Tri dichotomique desactivé croissant ou décroissant -Affichage des fichiers/ répertoires, fichiers seulement, répertoires seulement. Utilisation : voir main() Ouvert à toutes critiques constructives. Ceci est ma première source en C++ je viens de VB.NET xD. Ptite question : Pour créer une classe est t'on obligé d'avoir un fichier d'entete .h et un fichier source ou peut on tout regroupé dans le fichier d'entete afin que le fichier soit plus exportable?
Source
- /*
-
- Name : DEMIRDJIAN Yves
- Date : 15/11/2008
- Version : 1.0
- Type : C++
-
- */
-
-
-
- #include <iostream>
- #include <vector>
- #include <string>
-
- #include <dirent.h>
-
-
- using namespace std;
-
-
- namespace ListAllFiles
- {
- struct ListFiles_Opts
- {
- ListFiles_Opts() //Valeurs par défaut
- {
- Recurs = false;
- Sort = 0;
- Type = 2;
- FiltrExt = "*";
- WithHiddenFiles = false;
- }
- bool Recurs; //Analyser les sous répertoires?
- short int Sort; // Pas de tri : Sort=0, Tri croissant : Sort = 1, Tri decroissant : Sort = 2 !!!Attention : tri ASCII
- short int Type; //Tout : Type=2, Fichier : Type=1, Répertoire : Type=0
- string FiltrExt; //Fichiers a extensions. Une seule extension "*" Pour tout afficher ou laisser la chaine vide. Exemple FiltrExt="mp3".
- bool WithHiddenFiles; //La recherche inclus les fichiers cachés
- }; //ListFiles_Opts
-
-
-
- bool FiltreFile(string &Name, ListFiles_Opts Opts)
- {
- //le nom est suposé être non nul étant donné qu'un fichier de nom de fichier vide ne peut exister
- if (Opts.WithHiddenFiles == false && Name[0] == '.') return false;
- if (Opts.FiltrExt.empty() || Opts.FiltrExt == "" ||Opts.FiltrExt == "*") return true;
-
- //trouver le point, le point ne peut être en position 0 ou en dernier position
- int Pos = Name.length() - 2;
- while (Pos > 0)
- {
- if (Name[Pos] == '.') break;
- --Pos;
- }
-
- if (Pos <= 0) return false;
-
- //trouver l'extension. Les '/' du filtre permette une recherche directe avec mot entier sans mélanger 2 extensions
- string Ext = Name.substr(Pos + 1, Name.length() - Pos - 1);
- if (Opts.FiltrExt == Ext) return true;
-
- return false;
-
- }
-
- void InsertElemSorted(vector<string> &Vec, string &Elem, short int SortType)
- {
- //*********************
- //Dochotomie insertion
- //*********************
-
-
- if (SortType == 0 || Vec.empty())
- {
- Vec.push_back(Elem);
- }
- else //if(!Vec.empty())
- {
-
- int Deb = 0;
- int Fin = Vec.size() - 1;
- int Pos;
-
-
- if (SortType == 1) //Tri croissant
- {
- while (Deb <= Fin)
- {
- Pos = Deb + (Fin - Deb) / 2;
- if (Elem > Vec[Pos])
- {
- Deb = Pos + 1;
- }
- else
- {
- Fin = Pos - 1;
- }
- }
- }
- else //SortType == 2, tri décroissant
- {
- while (Deb <= Fin)
- {
- Pos = Deb + (Fin - Deb) / 2;
- if (Elem < Vec[Pos])
- {
- Deb = Pos + 1;
- }
- else
- {
- Fin = Pos - 1;
- }
- }
- }
-
-
-
- vector<string>::iterator it = Vec.begin();
-
- it += Deb;
- Vec.insert(it, Elem);
-
- }
-
- } //InsertElemSorted
-
-
- void ListFilesRec(string Path, vector<string> &Out, ListFiles_Opts Opts)
- {
-
- //vérification du formattage du chemion d'accès pour une bonne cohérence
- if (Path[Path.length() - 1] != '/') Path += "/";
-
- //Parcours du répertoire
- DIR *InitialRep = opendir(Path.c_str());
-
- if (InitialRep != NULL)
- {
- struct dirent *SRep;
-
- while ((SRep = readdir(InitialRep)) != NULL) //tant que le répertoire contient des fichiers
- {
- //definir le chemin d'acces complet
- string FileFound = SRep->d_name;
- string PathFound = Path + FileFound;
-
- //ajouter au vecteur mais selon le filtre et les options choisies
- if (FiltreFile(FileFound, Opts))
- {
- if (Opts.Type == 2)
- {
- InsertElemSorted(Out, PathFound, Opts.Sort);
- }
- else
- {
- if (!((bool (Opts.Type)) ^ (opendir(PathFound.c_str()) == NULL))) InsertElemSorted(Out, PathFound, Opts.Sort); //On vérifie le type (fichier/repertoire) et selon les option on insere l'élément
- }
- }
-
- //si recursivité dans les sous répertoires, analyser le repertoire
- if (Opts.Recurs && FileFound != "." && FileFound != "..") ListFilesRec(PathFound + "/", Out, Opts);
- }
-
- //fermer le repertoire courant
- closedir(InitialRep);
- }
-
- } //ListFilesRec
- } //Namespace ListAllFiles
-
-
-
- int main()
- {
- vector<string> MaListFics; //Ma liste de fichiers de sortie
- ListAllFiles::ListFiles_Opts MesOpts; //Ma structure option
-
- //Paramètres que je veux
- MesOpts.WithHiddenFiles = false;
- MesOpts.Recurs = false;
- MesOpts.Sort = 1;
- MesOpts.Type=0;
- MesOpts.FiltrExt ="*";
-
- //On lance tout ca
- ListAllFiles::ListFilesRec("/home", MaListFics, MesOpts); //Changer le chemin du répertoire ici.
-
- //On affiche (cela peut prendre un petit temps supplémentaire)
- cout << "Terminé." << endl << "Pressez une touche..." << endl;
- getchar();
- for (unsigned u = 0; u < MaListFics.size(); ++u)
- {
- cout << MaListFics[u] << endl;
- }
-
- return 0;
- } //main
/*
Name : DEMIRDJIAN Yves
Date : 15/11/2008
Version : 1.0
Type : C++
*/
#include <iostream>
#include <vector>
#include <string>
#include <dirent.h>
using namespace std;
namespace ListAllFiles
{
struct ListFiles_Opts
{
ListFiles_Opts() //Valeurs par défaut
{
Recurs = false;
Sort = 0;
Type = 2;
FiltrExt = "*";
WithHiddenFiles = false;
}
bool Recurs; //Analyser les sous répertoires?
short int Sort; // Pas de tri : Sort=0, Tri croissant : Sort = 1, Tri decroissant : Sort = 2 !!!Attention : tri ASCII
short int Type; //Tout : Type=2, Fichier : Type=1, Répertoire : Type=0
string FiltrExt; //Fichiers a extensions. Une seule extension "*" Pour tout afficher ou laisser la chaine vide. Exemple FiltrExt="mp3".
bool WithHiddenFiles; //La recherche inclus les fichiers cachés
}; //ListFiles_Opts
bool FiltreFile(string &Name, ListFiles_Opts Opts)
{
//le nom est suposé être non nul étant donné qu'un fichier de nom de fichier vide ne peut exister
if (Opts.WithHiddenFiles == false && Name[0] == '.') return false;
if (Opts.FiltrExt.empty() || Opts.FiltrExt == "" ||Opts.FiltrExt == "*") return true;
//trouver le point, le point ne peut être en position 0 ou en dernier position
int Pos = Name.length() - 2;
while (Pos > 0)
{
if (Name[Pos] == '.') break;
--Pos;
}
if (Pos <= 0) return false;
//trouver l'extension. Les '/' du filtre permette une recherche directe avec mot entier sans mélanger 2 extensions
string Ext = Name.substr(Pos + 1, Name.length() - Pos - 1);
if (Opts.FiltrExt == Ext) return true;
return false;
}
void InsertElemSorted(vector<string> &Vec, string &Elem, short int SortType)
{
//*********************
//Dochotomie insertion
//*********************
if (SortType == 0 || Vec.empty())
{
Vec.push_back(Elem);
}
else //if(!Vec.empty())
{
int Deb = 0;
int Fin = Vec.size() - 1;
int Pos;
if (SortType == 1) //Tri croissant
{
while (Deb <= Fin)
{
Pos = Deb + (Fin - Deb) / 2;
if (Elem > Vec[Pos])
{
Deb = Pos + 1;
}
else
{
Fin = Pos - 1;
}
}
}
else //SortType == 2, tri décroissant
{
while (Deb <= Fin)
{
Pos = Deb + (Fin - Deb) / 2;
if (Elem < Vec[Pos])
{
Deb = Pos + 1;
}
else
{
Fin = Pos - 1;
}
}
}
vector<string>::iterator it = Vec.begin();
it += Deb;
Vec.insert(it, Elem);
}
} //InsertElemSorted
void ListFilesRec(string Path, vector<string> &Out, ListFiles_Opts Opts)
{
//vérification du formattage du chemion d'accès pour une bonne cohérence
if (Path[Path.length() - 1] != '/') Path += "/";
//Parcours du répertoire
DIR *InitialRep = opendir(Path.c_str());
if (InitialRep != NULL)
{
struct dirent *SRep;
while ((SRep = readdir(InitialRep)) != NULL) //tant que le répertoire contient des fichiers
{
//definir le chemin d'acces complet
string FileFound = SRep->d_name;
string PathFound = Path + FileFound;
//ajouter au vecteur mais selon le filtre et les options choisies
if (FiltreFile(FileFound, Opts))
{
if (Opts.Type == 2)
{
InsertElemSorted(Out, PathFound, Opts.Sort);
}
else
{
if (!((bool (Opts.Type)) ^ (opendir(PathFound.c_str()) == NULL))) InsertElemSorted(Out, PathFound, Opts.Sort); //On vérifie le type (fichier/repertoire) et selon les option on insere l'élément
}
}
//si recursivité dans les sous répertoires, analyser le repertoire
if (Opts.Recurs && FileFound != "." && FileFound != "..") ListFilesRec(PathFound + "/", Out, Opts);
}
//fermer le repertoire courant
closedir(InitialRep);
}
} //ListFilesRec
} //Namespace ListAllFiles
int main()
{
vector<string> MaListFics; //Ma liste de fichiers de sortie
ListAllFiles::ListFiles_Opts MesOpts; //Ma structure option
//Paramètres que je veux
MesOpts.WithHiddenFiles = false;
MesOpts.Recurs = false;
MesOpts.Sort = 1;
MesOpts.Type=0;
MesOpts.FiltrExt ="*";
//On lance tout ca
ListAllFiles::ListFilesRec("/home", MaListFics, MesOpts); //Changer le chemin du répertoire ici.
//On affiche (cela peut prendre un petit temps supplémentaire)
cout << "Terminé." << endl << "Pressez une touche..." << endl;
getchar();
for (unsigned u = 0; u < MaListFics.size(); ++u)
{
cout << MaListFics[u] << endl;
}
return 0;
} //main
Historique
- 19 novembre 2008 22:04:41 :
- commentaire
- 19 novembre 2008 22:07:35 :
- commentaire
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
repertoire, dossier, fichier et disc dur ... [ par zinotron ]
je souhaite devellopper un prog ki soit capable de me donner le meme resultat que la commande tree (MS-DOS) mais qui soit portable (cad sans findnextf
lister une arborescence de repertoire [ par krater ]
bonjour, je souhaite réaliser un programme en C sous unix/linux qui rentre dans un fichier texte la liste des fichier du repertoir passer en parametre
Pb urgent - Parcourir un repertoire et lister les fichier - besoin d'aide [ par eupeup ]
Bonjour a tous, je suis en super galere, je suis sur un proj, mais je bug grave sur un ptit module de rien du tout, et la j'en peux plus... Je suis s
lister les fichier d'un répertoire [ par graall ]
Bonjour, j'aimerais pouvoir lister les fichiers présents dans un répertoire et avoir le résultat sous forme de tableau. (repertoire[0]
Fonction _chdir () c++ [ par Sn00bino_roi_du_petrol ]
Bonjour,Je realise un programme qui consiste a lister les fichiers du repertoire que je veux.Mais je n' arrive pas a imposer ma volonté:si je tap
Récuperer la date d'un Fichier/Dossier !!! [ par champista ]
Chalut,Je suis a la recherche d'une fonction pour recuperer la date d'un fichier ou d'un dossier afficher dans une listview (en MFC) .Je ve afficher e
recherche fichiers executables et comparaisons [ par limsa033 ]
Bonsoir,je cherche à lister tous les fichiers executables d(un disque dur ainsi que leur principales caractéristiques(nom,chemin et taille et date de
GetSize mais pour un dossier [ par shadow1779 ]
Bonjour, on m'a appris a utiliser GetFileSize pour recevoir la taille d'un fichier, y a til une fonction de l'api ou dans les libc standard afin d'av
[MFC]Ouvrir un fichier de destination... [ par SyN42 ]
Bonjour, Je cherche l'équivalent du : CFileDialog Browse(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "text Files (*.txt)|*.txt||")
lister les fichiers dans un dossier [ par shadow1779 ]
voila j'aimerai savoir comment faire pour lister les fichiers present dans un dossier si cela est possible en C.
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|