|
lister les fichiers d'un répertoire... |
Débuté par guillaume.fabrice, 28 nov. 2005 14:08 - 6 réponses |
| |
| | | |
|
| |
Posté le 28 novembre 2005 - 14:08 |
bonjour,
je réussi à lister les fichiers d'un répertoire mais problème... également ceux des sous répertoires présents, ce que je ne souhaite pas, bien évidemment.
Une idée sur la chose.
Merci par avance
Bon après midi
Fabrice |
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2005 - 15:52 |
merci, je vais regarder cela, je vais essayer de comprendre, ça à l'air complet |
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2005 - 16:06 |
PROCEDURE WindowsListeFicRep(Chemin="",Type=3,Tracer=Faux)
// Récupère la liste des fichiers et des sous répertoires
// du répertoire courant dans une liste
// Type=1 : répertoires
// 2 : fichiers
// 3 : rep+fichiers
Chemin=Remplace(Chemin,"\\","\")
b est entier
Liste est chaîne
Chem est chaîne = Chemin
SI Chem="" ALORS
NbLec est un entier
NbLec = AppelDLL32("kernel32", "GetLogicalDrives")
Valeur est entier
POUR b=1 A 26
SI b=1 ALORS
Valeur=1
SINON
Valeur=Puissance(2,b-1)
FIN
SI ( ETBinaire(NbLec, Valeur)) = Valeur ALORS
SI Liste<>"" ALORS Liste=Liste+RC
Liste=Liste+Caract(64+b)+":\"+TAB+fDisqueInfo(Caract(64+b)+":",fdTypeDisque)
FIN
FIN
RENVOYER Liste
FIN
Generique est chaîne
Generique = ExtraitChaîne(Chem,ChaîneOccurrence(Chem,"\")+1,"\")
SI Position(Generique,".")<1
//si position(chem,"\*.*")<1 ALORS
Chem=Remplace(Chem+"\*.*","\\","\")
Generique="*.*"
FIN
//si position(extraitchaine(chem,ChaîneOccurrence(chem,"\")+1,"\"),".")>0
// chem=remplace(chem,"\"+extraitchaine(chem,ChaîneOccurrence(chem,"\")+1,"\"),"\")
//FIN
WIN32_FIND_DATA est une structure
dwAttrib est un entier
CreeDateB est un entier
CreeDateH est un entier
DerAccB est un entier
DerAccH est un entier
DerEcritB est un entier
DerEcritH est un entier
nFileSizeHigh est un entier
nFileSizeLow est un entier
dwReserve0 est un entier
dwReserve1 est un entier
cFileName est une chaîne ASCIIZ sur 260
cAlternate est une chaîne ASCIIZ sur 14
FIN
WFD est un WIN32_FIND_DATA
lpFileName est une chaîne ASCIIZ sur 255
hFile est un entier
r est un entier = 1
// Ce code vous est offert par Beaussier en ligne
TypeRencontre est entier
MemCrée("ZM_TMPLISTE")
// Déclaration de la recherche à faire
BOUCLE
b++
lpFileName = ExtraitChaîne(Chem,b,";")
SI lpFileName=EOT ALORS SORTIR
hFile = AppelDLL32("kernel32", "FindFirstFileA", &lpFileName, &WFD)
SI hFile=-1 ALORS RENVOYER ""
// Ne rien faire avec la première ligne qui ramène le .
TANTQUE r
r = AppelDLL32("kernel32", "FindNextFileA", hFile, &WFD)
SI WFD:cFileName<>".." ET WFD:cFileName<>"." ALORS
SI fRep(Remplace(lpFileName,Generique,"")+WFD:cFileName,frRépertoire)<>"" ALORS
TypeRencontre=1
SINON
TypeRencontre=2
FIN
SI Tracer ALORS Trace(WFD:cFileName+ " - " +WFD:dwAttrib)
SI TypeRencontre=Type OU Type=3 ALORS
MemRecherche("ZM_TMPLISTE",TypeRencontre+Remplace(lpFileName,Generique,"")+WFD:cFileName)
SI MemEnDehors("ZM_TMPLISTE") ALORS
// liste=liste+remplace(lpFileName,"*.*","")+WFD:cFileName
SI TypeRencontre=1 ALORS
// Répertoire
MemAjoute("ZM_TMPLISTE",1+Remplace(lpFileName,Generique,"")+WFD:cFileName,Remplace(lpFileName,Generique,"")+WFD:cFileName+TAB+"R")
SINON
MemAjoute("ZM_TMPLISTE",2+Remplace(lpFileName,Generique,"")+WFD:cFileName,Remplace(lpFileName,Generique,"")+WFD:cFileName+TAB+"F")
FIN
MemTrie("ZM_TMPLISTE")
FIN
FIN
FIN
FIN
r = AppelDLL32("kernel32", "FindClose", hFile)
FIN
MemPremier("ZM_TMPLISTE")
TANTQUE PAS MemEnDehors("ZM_TMPLISTE")
SI Liste<>"" ALORS Liste = Liste+RC
Liste=Liste+MemRécupère("ZM_TMPLISTE",MemEnCours("ZM_TMPLISTE"))
MemSuivant("ZM_TMPLISTE")
FIN
MemSupprimeTout("ZM_TMPLISTE")
RENVOYER Remplace(Liste,"\\","\")
"Fabrice G." <guillaume.fabrice@free.fr> a écrit dans le message de news: 438afad9$1@news.pcsoft.fr...
bonjour,
je réussi à lister les fichiers d'un répertoire mais problème... également ceux des sous répertoires présents, ce que je ne souhaite pas, bien évidemment.
Une idée sur la chose.
Merci par avance
Bon après midi
Fabrice
|
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2005 - 16:49 |
Bonjour,
Je présume que tu utilises fListeFichier ?
Si oui utilise un "Renvoyer faux" dès que tu détectes un changement de répertoire avec le 3ième paramètre de ta fonction "callback" Si Change=flChangeRépertoire alors Renvoyer Faux
Tu devrais aussi pouvoir utiliser fRep(MonDossier+"\*.*",frfichier) pour lister tous les fichiers du répertoire
Amicalement |
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2005 - 17:16 |
je vais tester également votre suggestion !
Merci à vous
Bonne soirée
Salutations |
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2005 - 10:16 |
Bonjour Merci pour ce code fort utile J'ai cependant une question naive : comment on passe le chemin ?? j'ai fait un bout de code bebete pour tester : Liste = WindowsListeFicRep("D:\3DVOT\*.*",3,Vrai) la fonction hFile = AppelDLL32("kernel32", "FindFirstFileA", &lpFileName, &WFD) renvoi systematiquement -1
j'ai essayé plusieurs variante D: d:\3DVOT etc .. j'ai bien un disque D et le rpertoire existe bien
cordialement |
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2005 - 11:20 |
Bonjour J'ai trouvé mon erreur , mettre des / a la place des \ de plus le code qui determine si c'est un repertoire ne marche pas dans mon cas (PB de Majuscules peut etre -voir aide de windev-) je l'ai resolu en testant direcetement si c'est bien un repertoire via l'attribut positionne a FILE_ATTRIBUTE_DIRECTORY donc ca donne ... r = AppelDLL32("kernel32", "FindNextFileA", hFile, &WFD)
SI WFD:cFileName<>".." ET WFD:cFileName<>"." ALORS SI WFD:dwAttrib = 16 ALORS //SI fRep(Remplace(lpFileName,Generique,"")+WFD:cFileName,frRépertoire)<>"" ALORS TypeRencontre=1 SINON TypeRencontre=2 FIN Hope this help cordialement |
| |
| |
| | | |
|
| | | | |
| | |
|