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 :oops:
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 :oops:

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 :oops: l'icone c'était comme ça pour faire joli apres tout je suis une fille. :P

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 ??? :shock:
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 :oops: l'icone c'était comme ça pour faire joli apres tout je suis une fille. :P
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.