Accueil > > > LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES
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
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.
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
ARBRE BINAIREARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|