Page 1 sur 1
[R] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 15:44
par Laddy
Bonjour
je ne sais pas comment m'y prendre pour bien faire.
J'ai lu sur le forum que pour lister le contenu d'un dossier on devrait utiliser FileListToArray3.au3.
Malheureusement le code demande à utiliser _array
J'aimerai lister le contenu trouvé dans une listebox uniquement les répertoires trouvés
Je n'y arrive pas pourquoi ?
Y a t il un autre moyen pour lister des dossiers en excluant un ?
J'ai peut être mal cherché mais je n'ai pas trouvé d'exemples
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Zip.au3>
#include <Array.au3>
#include <FileListToArray3.au3>
#include <File.au3>
Global $Form1 = GUICreate("Créer un dossier", 345, 218, 192, 124)
Global $ListFolder = GUICtrlCreateList("", 168, 48, 169, 73)
Global $Create = GUICtrlCreateButton("Go", 144, 168, 97, 33, $WS_GROUP)
GUISetState(@SW_SHOW)
$ar_Array = _FileListToArray3 (@ScriptDir &"\ItAuto\", "", 2, 0, 0,"TEMP")
GUICtrlSetData($ListFolder, $ar_Array)
Do
$Msg = GUIGetMsg()
Switch $Msg
Case $Create
CreateFolder()
EndSwitch
Until $Msg = $GUI_EVENT_CLOSE
Func CreateFolder()
Global $Form2 = GUICreate("Création Profil utilisateur - Choisir un nom", 220, 147, 192, 124)
Global $UserName = GUICtrlCreateInput("", 8, 48, 201, 21)
Global $Create = GUICtrlCreateButton("Créer", 136, 96, 73, 25, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)
Do
$Msg = GUIGetMsg()
Switch $Msg
Case $Create
$RandomLettre = RandomLettre("a","z", 9)
$InstallDir = @ScriptDir &"\ItAuto\"&$RandomLettre & "."&GUICtrlRead($UserName)
MsgBox(0,"", $InstallDir)
DirCreate($InstallDir)
EndSwitch
Until $Msg = $GUI_EVENT_CLOSE
EndFunc
Func RandomLettre($strMin = "a", $strMax = "z", $szNb = 1)
Local $i, $Char
For $i = 1 to $szNb
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
Next
Return $Char
EndFunc
D'avance merci à ceux qui m'aideront.
Laddy
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 15:48
par Jerome
Coucou,
J'avais fait la même chose avec une listeView, inspire toi de mon code.
Code : Tout sélectionner
#include<Array.au3>
#include<FileListToArrayXT.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#Include <Misc.au3>
Global $Texte = "", $sTitre = "RELANCE"
global $text1, $index, $lien, $test, $text2
Global $ar_Array,$A_fichiers
$Form1_1 = GUICreate($Texte, 717, 384, 192, 124)
$Label1 = GUICtrlCreateLabel("RELANCE", 200, 24, 140, 37)
GUICtrlSetFont(-1, 22, 400, 0, "Arial")
$Input1 = GUICtrlCreateInput("", 232, 144, 73, 32)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Numero de fichier :", 56, 144, 165, 28)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Lancer", 520, 352, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Quitter", 616, 352, 75, 25, $WS_GROUP)
$Label4 = GUICtrlCreateLabel("Réference de la page :", 24, 216, 196, 28)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 232, 216, 113, 32)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
$ListView1 = GUICtrlCreateListView("", 376, 80, 322, 198)
_GUICtrlListView_AddColumn($ListView1,'Fichiers',342)
$Lst_Handle = GUICtrlGetHandle(-1)
GUISetState(@SW_SHOW, $Form1_1)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Input1
$text1 = GUICtrlRead($Input1)
If _IsPressed("0D") Then
lancer()
EndIf
Case $Input2
$text2 = GUICtrlRead($Input2)
If _IsPressed("0D") Then
lancer()
EndIf
Case $Button1
lancer()
Case $Button2
Exit
EndSwitch
Sleep(10)
WEnd
Func lancer()
_GUICtrlListView_DeleteAllItems($ListView1)
$lien = "\\chemin"
$ar_Array = _FileListToArrayXT ($lien, "*_"& $text1 &"_*.pdf", 1, 1, True)
$test = _FileListToArrayXT ($lien, "*_"& $text1 &"_*.pdf", 1, 0, True)
Dim $A_fichiers[$ar_Array[0]+1]
If @error Then Return GUICtrlCreateListViewItem('Aucun résultats',$ListView1)
For $i = 1 To $ar_Array[0]
$A_fichiers[$i] = StringRegExpReplace(StringTrimRight($ar_Array[$i],4),'.*\\','')
$item = GUICtrlCreateListViewItem($A_fichiers[$i],$ListView1)
Next
EndFunc
Et voir cet UDF :
http://www.autoitscript.fr/forum/viewto ... 484#p20484
Jérôme
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 15:58
par Laddy
Bonjour Jérome
tu m'as perdue avec ton code, j'en comprend que la moitié. Je vais prendre un doliprane
Merci pour ta réponse
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 16:10
par zeshrek
Je connais pas _FileListToArray3, donc plutot que de l'utiliser
j'ai utilisé
<File.au3> et _FileListToArray :
Code : Tout sélectionner
#include <File.au3>
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Zip.au3>
#include <Array.au3>
#include <FileListToArray3.au3>
#include <File.au3>
Global $Form1 = GUICreate("Créer un dossier", 345, 218, 192, 124)
Global $ListFolder = GUICtrlCreateList("", 168, 48, 169, 73)
Global $Create = GUICtrlCreateButton("Go", 144, 168, 97, 33, $WS_GROUP)
GUISetState(@SW_SHOW)
$ar_Array = _FileListToArray(@ScriptDir &"\ItAuto\", "", 2, 0, 0,"TEMP")
GUICtrlSetData($ListFolder, _ArrayToString($ar_Array, "|", 1), $ar_Array[1])
Do
$Msg = GUIGetMsg()
Switch $Msg
Case $Create
CreateFolder()
EndSwitch
Until $Msg = $GUI_EVENT_CLOSE
Func CreateFolder()
Global $Form2 = GUICreate("Création Profil utilisateur - Choisir un nom", 220, 147, 192, 124)
Global $UserName = GUICtrlCreateInput("", 8, 48, 201, 21)
Global $Create = GUICtrlCreateButton("Créer", 136, 96, 73, 25, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)
Do
$Msg = GUIGetMsg()
Switch $Msg
Case $Create
$RandomLettre = RandomLettre("a","z", 9)
$InstallDir = @ScriptDir &"\ItAuto\"&$RandomLettre & "."&GUICtrlRead($UserName)
MsgBox(0,"", $InstallDir)
DirCreate($InstallDir)
EndSwitch
Until $Msg = $GUI_EVENT_CLOSE
EndFunc
Func RandomLettre($strMin = "a", $strMax = "z", $szNb = 1)
Local $i, $Char
For $i = 1 to $szNb
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
Next
Return $Char
EndFunc
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 16:19
par Laddy
Bonjour zeshrek
Merci de te pencher sur mon problème.
Le code me retourne une erreur : ERROR: _FileListToArray() called with wrong number of args
sur cette ligne :
$ar_Array = _FileListToArray(@ScriptDir &"\ItAuto\", "", 2, 0, 0,"TEMP")
J'ai corrigé ainsi : $ar_Array = _FileListToArray(@ScriptDir &"\ItAuto\", "", 2)
mais j'ai une autre erreur :
C:\Documents and Settings\Laddy\Bureau\Autoit_source$\listview.au3 (21) : ==> Subscript used with non-Array variable.:
GUICtrlSetData($ListFolder, _ArrayToString($ar_Array, "|", 1), $ar_Array[1])
GUICtrlSetData($ListFolder, _ArrayToString($ar_Array, "|", 1), $ar_Array^ ERROR
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 16:43
par zeshrek
Honte a moi, la syntaxe pour la ligne en question est :
$ar_Array = _FileListToArray(@ScriptDir &"\ItAuto\", "*.*", 2)
Le bug vient du fait que si on lui donne pas de masque, bin il trouve aucun fichier. Il manquait donc juste *.* entre les guillemets
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 17:05
par Laddy
ah oui effectivement ça va mieux par contre cette fonction n'exclut pas de dossiers apprement.
Comment exclure le dossier TEMP du résultat ?
En plus apres faut que je trouve comment récuperer le resultat de la ligne trouvé pour faire une autre action.
rahla la c'est compliqué autoit
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 17:20
par zeshrek
hummmm....
je viesn de regarder sur le fofo la syntaxe de _FileListToArray3 que tu utilisais avant que je chamboule tout. Essaye ca :
$ar_Array = _FileListToArray3 (@ScriptDir &"\ItAuto\", "*.*", 2, 0, 0,"TEMP")
(en fait il manquait que *.* a ta ligne d'origine)
ca devrait exclure TEMP
Par contre le "resultat de la ligne trouvé pour faire une autre action" il se trouve dans le tableau $ar_Array, ou (logiquement, mais je peux me tromper) :
$ar_Array[0] = nb d'enregistrement dans le tableau (x)
$ar_Array[1] à $ar_Array[x] = le nom des différents répertoires qui sont dans le dossier ItAuto
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 17:59
par Laddy
Re,
ta solution : $ar_Array = _FileListToArray3 (@ScriptDir &"\ItAuto\", "*.*", 2, 0, 0,"TEMP")
fonctionne le dossier est bien exclu.
Par contre je n'ai pas bien compris l'histoire des array désolé mais je n'ai pas encore traité d informations provenant de ce type de fonction mes scripts ont été jusque là très basique.
Pour résumé,je souhaite selectionner un dossier dans ma listebox, et je souhaiterai exécuter une action via un nouveau bouton
Du genre :
Code : Tout sélectionner
Global $Start = GUICtrlCreateButton("Demarre", 8, 56, 145, 33, $WS_GROUP)
$Path = @UserProfileDir &"\Local Settings\Application Data\Google\Chrome\User Data\
Func Start()
Run ( "Chrome.exe --user-data-dir=" &$Path &\Dossier_selectionne")
EndFunc
comment récupérer l'information ?
J'ai tenté ceci :
Code : Tout sélectionner
For $i = 1 To _ArrayMax($ar_Array)
msgbox(0,"test",$ar_Array[$i])
Next
Mais la msgbox me cite tout le contenu du dossier pfff
Merci pour ton aide.
Laddy
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 18:11
par Jerome
Coucou,
Cherche l'équivalent, mais pour une listview, j'utilise :
Code : Tout sélectionner
$SelIndexItem = _GUICtrlListView_GetSelectedIndices($List1) +0
$SelIndex = _GUICtrlListView_GetItem($List1, $SelIndexItem)
Jérôme
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 18:28
par Laddy
J'ai cherché et j'ai une piste mais je ne suis pas sûr de moi
Code : Tout sélectionner
Func Start()
$aItems = _GUICtrlListBox_GetSelItems($ListFolder)
For $iI = 1 To $aItems[0]
If $iI > 1 Then $sItems &= ", "
$sItems &= $aItems[$iI]
Next
MsgBox(4160, "Information", "Items Selected: " & $sItems)
EndFunc
En plus j'ai pas de résultat.
Re: [..] Lister le contenu d'un dossier
Posté : mer. 24 nov. 2010 20:41
par zeshrek
Laddy a écrit :Re,
ta solution : $ar_Array = _FileListToArray3 (@ScriptDir &"\ItAuto\", "*.*", 2, 0, 0,"TEMP")
fonctionne le dossier est bien exclu.
bon, donc ca c'est fait
Laddy a écrit :Par contre je n'ai pas bien compris l'histoire des array désolé mais je n'ai pas encore traité d informations provenant de ce type de fonction mes scripts ont été jusque là très basique.
Pour résumé,je souhaite selectionner un dossier dans ma listebox, et je souhaiterai exécuter une action via un nouveau bouton
Du genre :
Code : Tout sélectionner
Global $Start = GUICtrlCreateButton("Demarre", 8, 56, 145, 33, $WS_GROUP)
$Path = @UserProfileDir &"\Local Settings\Application Data\Google\Chrome\User Data\
Func Start()
Run ( "Chrome.exe --user-data-dir=" &$Path &\Dossier_selectionne")
EndFunc
comment récupérer l'information ?
Tu y est presque. Il faut juste recuperer le dossier sélectionné. Pour ca c'est la fonction GUICtrlRead.
Donc comme la listbox s'appelai $ListFolder, ta fonction start devient qqchose du genre :
Func Start()
$DossierSelectionne=GUICtrlRead ($ListFolder)
Run ( "Chrome.exe --user-data-dir=" & $Path & "\" & $DossierSelectionne)
EndFunc[/code]
Laddy a écrit :J'ai tenté ceci :
Code : Tout sélectionner
For $i = 1 To _ArrayMax($ar_Array)
msgbox(0,"test",$ar_Array[$i])
Next
Mais la msgbox me cite tout le contenu du dossier pfff
Merci pour ton aide.
Laddy
bé oui, là tu lui demande de te lister tout ce qui a servi a construire la liste déroulante.
Si tu veux recuperer le choix de l'utilisateur, faut voir GUICtrlRead
Re: [..] Lister le contenu d'un dossier
Posté : jeu. 25 nov. 2010 14:18
par Laddy
Bonjour
mais oui bien sûr !! quelle débutante je fais
Merci tout est ok Maintenant.
Merci pour ta patience et ton aide.
Bonne journée
Laddy
Re: [R] Lister le contenu d'un dossier
Posté : jeu. 25 nov. 2010 14:37
par zeshrek
y a pas de mal, tu sais on a tous débuté un jour dans un domaine ou un autre...
Re: [R] Lister le contenu d'un dossier
Posté : jeu. 25 nov. 2010 18:00
par Laddy
Oui on a tous débuté.
Une petite question supplémentaire, j'ai cherché sur le forum mais est il possible d'ajouter une image avec GUICtrlCreateList uniquement ?
j'ai vu que des exemples avec GUICtrlCreateListView
car je serai incapable de tout remodifié en ListView

l'icone c'était comme ça pour faire joli apres tout je suis une fille.
J'ai une autre question
lorsque deux Gui sont imbriquées.
Comment faire pour fermer la deuxieme à la fin de l'action du bouton et continué de rendre la seconde opérationnelle ?
J'ai mis GuiDelete() dans la second et la premiere fonctionne plus, et si je met Exit les deux gui se ferment
GuiDelete($Form2) et pareil ça ne fonctionne pas
Re: [R] Lister le contenu d'un dossier
Posté : jeu. 25 nov. 2010 18:27
par Jerome
Coucou,
Réponse
ici, merci de penser à faire des recherches sur le forum
Jérôme
Re: [R] Lister le contenu d'un dossier
Posté : jeu. 25 nov. 2010 18:36
par Laddy
Je cherche je cherche mais tu crois que j'aurai trouvé le mot clé évènementiel ???

Et j'ai pas pensé à Multi Gui
Merci pour le lien je vais l'etudier et l'adapter.
Re: [R] Lister le contenu d'un dossier
Posté : ven. 26 nov. 2010 11:45
par zeshrek
Laddy a écrit :Oui on a tous débuté.
Une petite question supplémentaire, j'ai cherché sur le forum mais est il possible d'ajouter une image avec GUICtrlCreateList uniquement ?
j'ai vu que des exemples avec GUICtrlCreateListView
car je serai incapable de tout remodifié en ListView

l'icone c'était comme ça pour faire joli apres tout je suis une fille.

Heuuu.... Je Igor, europe de l'est, pas compris !
Qu'entends tu par "est il possible d'ajouter une image avec GUICtrlCreateList uniquement ?"
GUICtrlCreateList sert a faire des listes (dingue !) pas a ajouter des images. Pour ca je te conseille plutot :
GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )
Ou alors j'ai loupé un truc dans la discussion...
Laddy a écrit :J'ai une autre question
lorsque deux Gui sont imbriquées.
Comment faire pour fermer la deuxieme à la fin de l'action du bouton et continué de rendre la seconde opérationnelle ?
J'ai mis GuiDelete() dans la second et la premiere fonctionne plus, et si je met Exit les deux gui se ferment
GuiDelete($Form2) et pareil ça ne fonctionne pas
tu as pensé a
GUISetState (@SW_HIDE, $Form2) ;~ cache la gui concernée
GUISetState (@SW_DISABLE, $form2) ;~ la désactive
Sinon, donne ton source, parceque là comme ca...
Re: [R] Lister le contenu d'un dossier
Posté : ven. 26 nov. 2010 14:32
par Jerome
Coucou,
A proprement parler, on ne peut pas mettre d'image dans un list, pour cela, il faut créer une autre list à coté qui elle peut contenir des images, c'est transparent pour l'utilisateur final, mais c'est comme sa.
Regarde du coté de _GUIImageList_Create.
Ce post pourra t'être utile.
Jérôme
Re: [R] Lister le contenu d'un dossier
Posté : ven. 26 nov. 2010 15:07
par Laddy
Bonjour
j'ai pas ma source sous la main mais grâce au sujet de Jérome j'ai pu fermer ma second gui.