| |
|
|
C++ Builder / Affichage du contenu
d'un disque
- Pour faire fonctionner ce code source, il faut:
-
-
|
Un TTreeview nommé : Arbre
|
|
Une TImageList avec 2 icones pour la propriété
Images du TTreeView
|
|
Modifier le nom de la fenêtre TfwMenu par la
vôtre
|
|
Passer comme paramètre à la fonction
CreationArbre (ex: "C:\\")
|
- #include <dirent.h>
- #include <sys\stat.h>
-
-
|
#define REPERTOIRE
|
0
|
// Indice dans la liste des images
|
|
#define FICHIER
|
1
|
// Indice dans la liste des images
|
-
- int __fastcall
TfwMenu::CreationArbre(const AnsiString csDisquePar)
-
- {
- DIR *dir;
- struct dirent *ent;
- struct stat statbuf;
- AnsiString csFichier,csNomFichier;
- TTreeNode * pNode;
-
-
- Arbre->Items->Clear(); // On vide
le TTreView Arbre
- Arbre->SortType = stNone; // Pas
de tri sur l'arbre
-
- if ((dir = opendir(csDisquePar.c_str()))
== NULL)
-
- return -1; //Impossible d'ouvrir
-
- while ((ent = readdir(dir)) !=
NULL)
-
- {
- csFichier = csDisquePar;
- csFichier += ent->d_name;
-
- if (stat(csFichier.c_str(),&statbuf)
!= 0)
-
- return -3; // Pas d'information
-
- csNomFichier = ent->d_name;
-
- if (statbuf.st_mode &
S_IFDIR)
-
- {
- pNode = Arbre->Items->Add(NULL,csNomFichier);
- pNode->ImageIndex = REPERTOIRE;
- AfficherRepertoire(csFichier,pNode);
- }
-
- if (statbuf.st_mode &
S_IFREG)
-
- {
- pNode = Arbre->Items->Add(NULL,csNomFichier);
- pNode->ImageIndex = FICHIER;
- }
- }// Fin du while
-
- if (closedir(dir) != 0)
-
- return -2; // Impossible
de fermer
-
- return 0; // Valeur par defaut
- }
-
int __fastcall
TfwMenu::AfficherRepertoire(const AnsiString csRepertoirePar,TTreeNode
* pNodePar)
-
- {
- DIR *dir;
- struct dirent *ent;
- struct stat statbuf;
- AnsiString csFichier,csNomFichier;
TTreeNode * pNode;
-
- if ((dir = opendir(csRepertoirePar.c_str()))
== NULL)
-
- return -1; //Impossible d'ouvrir
-
- while ((ent = readdir(dir)) != NULL)
-
- {
- // Constitution du chemin du fichier
- csFichier = csRepertoirePar;
- csFichier += "\\";
- csFichier += ent->d_name;
-
- if (stat(csFichier.c_str(),&statbuf)
!= 0)
-
- return -3; // Pas d'information
-
- csNomFichier = ent->d_name;
-
- if (csNomFichier == ".") continue;
- if (csNomFichier == "..") continue;
-
- if (statbuf.st_mode & S_IFDIR)
-
- {
- pNode = Arbre->Items->AddChild(pNodePar,csNomFichier);
- pNode->ImageIndex = REPERTOIRE;
- AfficherRepertoire(csFichier,pNode); // Récursivité
- }
-
- if (statbuf.st_mode & S_IFREG)
-
- {
- pNode = Arbre->Items->AddChild(pNodePar,csNomFichier);
- pNode->ImageIndex = FICHIER;
- }
- }// Fin du while
-
- if (closedir(dir) != 0)
-
- return -2; // Impossible de fermer
-
- return 0; // Valeur par defaut
- }
|