[..] Parcours de dossier récursif - ne fonctionne pas

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

[..] Parcours de dossier récursif - ne fonctionne pas

#1

Message par matheod »

Bonjour,
je cherche à faire une fonction de parcours de dossier récursif, c'est à dire qu'a chaque nouveau dossier trouvé, il est parcourrus. J'ai codé la fonction parcourir, or celle ci ne fonctionne pas. Les sous dossier ne sont pas parcourus, j'obtient le message disant qu'aucun fichier n'a était trouvé.

Code : Tout sélectionner

Func parcourir($chercher)
$resultat=""
$search = FileFindFirstFile($chercher&"/*")
If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Else


While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $resultat&=$file&"|"
If StringInStr(FileGetAttrib($file),"D") Then
    $resultat&=parcourir($chercher&"/"&$file&"/*")
    EndIf
WEnd
EndIf
FileClose($search)

return $resultat

EndFunc


MsgBox(0,"a",parcourir("."))
Quelqu'un serait il où est le problème ? En vérifiant à l'aide de MsgBox, il me trouve bien 1 fichier et 1 dossier présent dans le dossier en cours, fait bien une recherche dans ce dossier, mais : n'y trouve rien (alors qu'il y a d'autre fichier/dossier).

Voilà, merci d'avance pour votre aide,
bonne journée

ps : je ne recherche pas de fonction pour parcourir les dossiers (il y en a d'ailleur une sur le forum) mais bien trouver d'ou vient le problème dans mon code.

merci
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#2

Message par matheod »

serait il possible que ca viennent du faite que $search est une variable un peu spécial vu qu'on doit faire close après ? (donc en gros la portée serait globale et donc il y aurait conflit de variable)
edit : apparament d'après mes tests ça n'a pas l'air d'être ça.
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#3

Message par jbnh »

salut,

Le script en soit à l'air bon, mais qu'attend tu comme réponse dans la msgbox ? Tout les fichiers des sous dossiers etc ?

Pcq dans l'appel récursif, tu réinitialiseras toujours ta variable résultat à "", c'est déjà étrange :|
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#4

Message par matheod »

bah si par exemple j'ai comme dossier :

./lol
...../test
............/exemple.png
............/test.txt
./mdr.xcf

je souhaiterais avoir d'affiché :
lol|test|exemple.png|test.txt|mdr.xcf

Quand à la variable resultat, il ne faut pas oublier qu'elle à une porté locale.
En gros ca devrait se passer comme ca :
la fonction s'execute, elle detecte le dossier test, qui est ajouté a $resultat, la fonction se reexecute mais avec la recherche dans le dossier test, celui ci trouve exemple.png qui s'ajoute à la variable $resultat mais qui elle est vide (on est dans une nouvelle "instance" de la fonction", il trouve test.txt et le rajoute a $resultat on a donc $resultat="exemple.png|test.txt|", la fonction se termine, paf le return => il renvoie donc exemple.png|test.txt|
=> mais cette valeur est récupéré et ajouté au $resultat de la fonction executé en premier ellle vaut donc test|exemple.png|test.txt| elle continu de chercher et paf mdr.xcf il l'ajoute et hop : $resultat vaut test|exemple.png|test.txt|mdr.xcf|
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#5

Message par Tlem »

Pourquoi ré-inventer la roue ...
La/les fonctions existes déjà ici : http://www.autoitscript.fr/forum/viewto ... f=21&t=479
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#6

Message par matheod »

Tlem a écrit :Pourquoi ré-inventer la roue ...
La/les fonctions existes déjà ici : http://www.autoitscript.fr/forum/viewto ... f=21&t=479
tout simplement car j'ai pensais à chercher si ca n'existait pas déja après avoir fait ma fonction, et maintenant j'aimerais bien savoir pourquoi ma fonction marche pas (bien que pour les besoins de mon logiciel j'ai justement utilisé cette fonction) ^^
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#7

Message par Tlem »

Si vous tenez absolument à faire fonctionner votre fonction, il va falloir étudier le principe de la récursion. :roll:

Comme je n'ai pas le temps de vous détailler le pourquoi du comment, je vous joint la première fonction de recherche récursive tirée de la commande _FileListToArray et créé par BaKaMu dans un sujet que j'avais ouvert afin d'optimiser cette fonction.
La fonction originale s'appelait _FileListToArrayEx2, mais je l'ai simplifié pour limiter le nombre d'options.
Déjà, cela vous donnera une idée de la structure d'une recherche récursive ...
La partie la plus intéressante ce trouve lignes 97-113 et le cœur du problème en ce qui vous concerne, ligne 110. :lol:
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#8

Message par matheod »

salut,

merci de ta réponse.
Tout d'abord, dans ce code ci, il y a une ligne que je ne comprend pas :

If @extended = 0 Then ContinueLoop ;bypass file (for Autoit versions > 3.3.0.0)

La doc de la fonction FileFindNextFile ne fait pas allusion à @extended, bon peut être que cette particularité à était enlevé dans les fonctions suivante donc passons.

En comparant le code au mien je retrouve les mêmes procédés :

j'ai une fonction qui fait la première recherche, et je boucle, et je relance la fonction pour parcourir les dossiers.
Seul différence ici, je ne vois à aucun moment où il fait le test pour voir si le fichier en question est un dossier.

merci ;-)

ps : j'ajoute d'ailleur en mettant des MsgBox, que ma fonction est bien lancé pour chaque sous dossier, seul problème les sous dossiers eux sont considéré comme vide oO Pourtant en lancant moi même la fonction avec comme paramètre le chemin du sous dossier, ceux ci renvoie quelque chose.
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#9

Message par Tlem »

matheod a écrit :La doc de la fonction FileFindNextFile ne fait pas allusion à @extended
Hummm. Deux solutions :
- Soit vous avez oublié de mettre vos lunettes.
- Soit vous utilisez une ancienne version de AutoIt.

Vérifiez donc de bien avoir la dernière version de AutoIt et relisez la documentation de la fonction FileFindNextFile (surtout la partie Return Value). :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
matheod
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 07 juil. 2010 23:41
Status : Hors ligne

Re: [..] Parcours de dossier récursif - ne fonctionne pas

#10

Message par matheod »

Tlem a écrit :
matheod a écrit :La doc de la fonction FileFindNextFile ne fait pas allusion à @extended
Hummm. Deux solutions :
- Soit vous avez oublié de mettre vos lunettes.
- Soit vous utilisez une ancienne version de AutoIt.

Vérifiez donc de bien avoir la dernière version de AutoIt et relisez la documentation de la fonction FileFindNextFile (surtout la partie Return Value). :roll:
j'aurais tant voulus que ma version d'auto it ne sois pas à jours :-(

Bon je test avec extended dès que je peux et je vous dit ;-)
Le "ça ne marche pas" est une conséquence commune découlant de l’absence de membres inférieures.
Répondre