[R] Lister le contenu d'un dossier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[R] Lister le contenu d'un dossier

#1

Message 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
Modifié en dernier par Laddy le jeu. 25 nov. 2010 14:18, modifié 1 fois.
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#2

Message 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
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#3

Message 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
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#4

Message 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
 
Si vis pacem para bellum
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#5

Message 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
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#6

Message 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
Si vis pacem para bellum
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#7

Message 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
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#8

Message 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
Si vis pacem para bellum
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#9

Message 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
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#10

Message 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
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#11

Message 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.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#12

Message 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
Si vis pacem para bellum
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister le contenu d'un dossier

#13

Message 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
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#14

Message par zeshrek »

y a pas de mal, tu sais on a tous débuté un jour dans un domaine ou un autre...
Si vis pacem para bellum
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#15

Message 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
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#16

Message par Jerome »

Coucou,


Réponse ici, merci de penser à faire des recherches sur le forum ;)





Jérôme
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#17

Message 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.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#18

Message 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...
Si vis pacem para bellum
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#19

Message 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
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Lister le contenu d'un dossier

#20

Message 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.
Répondre