PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → lister les fichiers d'un répertoire...
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