Page 1 sur 2
[R] Lire un dossier
Posté : sam. 11 juin 2011 19:04
par TT22
Bonjour,
Je voudrais savoir comment faire pour lire le nom de touts les dossiers et fichiers présents dans un dossier puis les écrires dans un fichier.ini
De façon à ce que une section corresponde au nom d'un dossier et qu'il y ait dans chaque section le nom d'un fichier et ce qu'il contient.
Par exemple :
Si premier dossier s'appelle "dossier1" et qu'il contient un autre dossier qui se nome "dossier2" qui lui même contient un fichier qui se nome "fichier1" dans lequel est écrit "test". Il faudrait que le fichier.ini ressemble à ça :
[dossier1]
[dossier2]
fichier1=test
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:26
par mikell
_FileListToArray() est ton amie
exemple avec la fonction
_FindFiles() trouvée sur le forum US :
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
$list = @scriptdir & "\list.txt"
$txt = FileOpen($list, 1)
_FindFiles(@scriptdir, '*')
Func _FindFiles($sRoot, $sFile)
Local $FileList
$FileList = _FileListToArray($sRoot, $sFile, 2)
If Not @error Then
;_ArrayDisplay($FileList)
;#cs
For $i = 1 To $FileList[0]
FileWriteLine ($txt, $sRoot & '\' & $FileList[$i])
Next
;#ce
EndIf
#cs
$FileList = _FileListToArray($sRoot, '*', 2)
If Not @error Then
For $i = 1 To $FileList[0]
_FindFiles($sRoot & '\' & $FileList[$i], $sFile)
Next
EndIf
#ce
EndFunc ;==>_FindFiles
FileClose($txt)
au lieu de copier dans un txt tu gères avec IniWrite()
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:31
par Zippo
Utilise les fonctions INI pour créer le fichier. (Iniwrite,...)
Pour récupérer les dossiers et les fichiers je te conseil la fonction FileFindFirstFile qui est très bien présenté dans le Help de l'éditeur (F1).
A toi de trouver un système pour savoir si c'est un dossier ou un fichier.
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:39
par TT22
Ouai, FileFindFirstFile marche bien
mais comment je fais pour savoir si c'est un dossier ou un fichier ?
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:42
par mikell
Code : Tout sélectionner
#Include <File.au3>
_FileListToArray($sPath [, $sFilter = "*" [, $iFlag = 0]])
$iFlag=1 Return files only
$iFlag=2 Return Folders only
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:46
par Zippo
Simple ^^ ...
► Afficher le texte
Code : Tout sélectionner
$search = FileFindFirstFile("*.*")
If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$filetest = FileOpen($file,0);Test si c'est un fichier
If $filetest = -1 Then;Erreur donc ce n'est pas un fichier donc un dossier
MsgBox(0,"Dossier:",$file)
Else
MsgBox(0, "Fichier:", $file)
EndIf
WEnd
FileClose($search)
Voilà =)
Re-Edit : La fonction de mikell est peut être plus simple

Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:46
par TT22
Ouai, merci mais il faudrait que si il trouve un dossier, il refasse la même chose mais dans ce dossier.
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:49
par mikell
OK si tes fichiers ne sont pas des images, des mp3, des avi, etc
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:51
par mikell
TT22 a écrit :Ouai, merci mais il faudrait que si il trouve un dossier, il refasse la même chose mais dans ce dossier.
T'as mal lu mon script...
Tu peux rechercher dans des dossiers et tous leurs sous-dossiers

Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:53
par TT22
@Mikell
Tu pourrait me donner le script complait ?
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:54
par Zippo
mikell a écrit :OK si tes fichiers ne sont pas des images, des mp3, des avi, etc
Oui d'accord mais sur le plan utilisation il me repère bien des fichiers RAR, PNG etc, donc pas d'accord ^^
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 19:57
par mikell
Ouala
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
$list = @scriptdir & "\list.txt"
$txt = FileOpen($list, 1)
_FindFiles(@scriptdir, '*')
Func _FindFiles($sRoot, $sFile)
Local $FileList
$FileList = _FileListToArray($sRoot, $sFile, 2) ; <== [color=#FF0000]recherche dossiers[/color]
If Not @error Then
For $i = 1 To $FileList[0]
FileWriteLine ($txt, $sRoot & '\' & $FileList[$i])
Next
EndIf
$FileList = _FileListToArray($sRoot, '*', 2)
If Not @error Then
For $i = 1 To $FileList[0]
_FindFiles($sRoot & '\' & $FileList[$i], $sFile) ; <== [color=#FF0000]recherche sous-dossiers[/color]
Next
EndIf
EndFunc ;==>_FindFiles
FileClose($txt)
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:08
par TT22
J'ai testé et il me trouve pas les sous-dossiers !
Y'a pas quelqu'un qui pourrait me faire un script comme ce que j'ai demandé au début parceque je trouve tout cela très compliqué

Mais je pense que Zippo était sur la bonne voie :
Zippo a écrit :
► Afficher le texte
Code : Tout sélectionner
$search = FileFindFirstFile("*.*")
If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$filetest = FileOpen($file,0);Test si c'est un fichier
If $filetest = -1 Then;Erreur donc ce n'est pas un fichier donc un dossier
MsgBox(0,"Dossier:",$file)
Else
MsgBox(0, "Fichier:", $file)
EndIf
WEnd
FileClose($search)
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:11
par Zippo
Ouai mais zippo fait un barbecue .. XD Si se soir c'est pas résolue, j’essaierai à mon tour

Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:12
par TT22
Ok alors bon appétit

Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:13
par Zippo
TT22 a écrit :Ok alors bon appétit

Merci l'ami !
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:14
par TT22
Hey Zippo, tu aime les Zippo ?
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:20
par Zippo
Sa se barre en Tchat, je penses pas que les modérateurs vont être content mdr ! Sinon pour répondre à ta question, Oui ^^
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:21
par TT22
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
GUICreate("Zippo", 220, 120)
$gauche = GUICtrlCreateInput("",5,20,100,20)
$droite = GUICtrlCreateInput("",115,20,100,20)
$Dater = GUICtrlCreateButton("Dater",5,50,210,30)
$Aide = GUICtrlCreateButton("Aide",5,85,210,30)
GUICtrlCreateLabel("Gauche :",5,3,100,15)
GUICtrlCreateLabel("Droite :",115,3,100,15)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Aide
MsgBox(0,"Zippo Aide","Pour les Zippo ayant une inscription au centre, inscrivez-la à gauche."&@CRLF&'Les caractères sont : "." , "I" , "V" , "X" , "/" , "\" , "A à L".'&@CRLF&"Attention, réspectez les majuscules !"&@CRLF&'Si vous avez besoins de sauter des lignes, inscrivez "_" à la place (sans espaces).'&@CRLF&"Zippo est une marque déposée.")
Case $Dater
$g = GUICtrlRead($gauche)
$d = GUICtrlRead($droite)
If($g = "Patent Pending") Then
$msgbox = "Ce Zippo date de 1932 à 1936"
EndIf
If($g = "Patent #2032695") Then
$msgbox = "Ce Zippo date de 1937 à 1949"
EndIf
If($g = "Patent #2517191") Then
$msgbox = "Ce Zippo date de 1950 à 1956"
EndIf
If($g = "Full stamp with patent pending") Then
$msgbox = "Ce Zippo date de 1957"
EndIf
If($g = "Full stamp with no patent pending_....") Then
$msgbox = "Ce Zippo date de 1958"
EndIf
If($g = "....") Then
If($d = "...") Then
$msgbox = "Ce Zippo date de 1959"
EndIf
EndIf
If($g = "...") Then
If($d = "...") Then
$msgbox = "Ce Zippo date de 1960"
EndIf
If($d = "..") Then
$msgbox = "Ce Zippo date de 1961"
EndIf
EndIf
If($g = "..") Then
If($d = "..") Then
$msgbox = "Ce Zippo date de 1962"
EndIf
If($d = ".") Then
$msgbox = "Ce Zippo date de 1963"
EndIf
EndIf
If($g = ".") Then
If($d = ".") Then
$msgbox = "Ce Zippo date de 1964"
EndIf
If($d = "") Then
$msgbox = "Ce Zippo date de 1965"
EndIf
EndIf
If($g = "IIII") Then
If($d = "IIII") Then
$msgbox = "Ce Zippo date de 1966"
EndIf
If($d = "III") Then
$msgbox = "Ce Zippo date de 1967"
EndIf
EndIf
If($g = "III") Then
If($d = "III") Then
$msgbox = "Ce Zippo date de 1968"
EndIf
If($d = "II") Then
$msgbox = "Ce Zippo date de 1969"
EndIf
EndIf
If($g = "II") Then
If($d = "II") Then
$msgbox = "Ce Zippo date de 1970"
EndIf
EndIf
If($g = "I") Then
If($d = "II") Then
$msgbox = "Ce Zippo date de 1971"
EndIf
If($d = "I") Then
$msgbox = "Ce Zippo date de 1972"
EndIf
If($d = "") Then
$msgbox = "Ce Zippo date de 1973"
EndIf
EndIf
If($g = "////") Then
If($d = "////") Then
$msgbox = "Ce Zippo date de 1974"
EndIf
If($d = "///") Then
$msgbox = "Ce Zippo date de 1975"
EndIf
EndIf
If($g = "///") Then
If($d = "///") Then
$msgbox = "Ce Zippo date de 1976"
EndIf
If($d = "//") Then
$msgbox = "Ce Zippo date de 1977"
EndIf
EndIf
If($g = "//") Then
If($d = "//") Then
$msgbox = "Ce Zippo date de 1978"
EndIf
If($d = "/") Then
$msgbox = "Ce Zippo date de 1979"
EndIf
EndIf
If($g = "/") Then
If($d = "/") Then
$msgbox = "Ce Zippo date de 1980"
EndIf
If($d = "") Then
$msgbox = "Ce Zippo date de 1981"
EndIf
EndIf
If($g = "\\\\") Then
If($d = "\\\\") Then
$msgbox = "Ce Zippo date de 1982"
EndIf
If($d = "\\\") Then
$msgbox = "Ce Zippo date de 1983"
EndIf
EndIf
If($g = "\\\") Then
If($d = "\\\") Then
$msgbox = "Ce Zippo date de 1984"
EndIf
If($d = "\\") Then
$msgbox = "Ce Zippo date de 1985"
EndIf
EndIf
If($d = "II") Then
$annee = "1986"
EndIf
If($d = "III") Then
$annee = "1987"
EndIf
If($d = "IV") Then
$annee = "1988"
EndIf
If($d = "V") Then
$annee = "1989"
EndIf
If($d = "VI") Then
$annee = "1990"
EndIf
If($d = "VII") Then
$annee = "1991"
EndIf
If($d = "VIII") Then
$annee = "1992"
EndIf
If($d = "IX") Then
$annee = "1993"
EndIf
If($d = "X") Then
$annee = "1994"
EndIf
If($d = "XI") Then
$annee = "1995"
EndIf
If($d = "XII") Then
$annee = "1996"
EndIf
If($d = "XIII") Then
$annee = "1997"
EndIf
If($d = "XIV") Then
$annee = "1998"
EndIf
If($d = "XV") Then
$annee = "1999"
EndIf
If($d = "XVI") Then
$annee = "2000"
EndIf
If($d = "XVII") Then
$annee = "2001"
EndIf
If($d = "XVIII") Then
$annee = "2002"
EndIf
If($d = "XIX") Then
$annee = "2003"
EndIf
If($d = "XX") Then
$annee = "2004"
EndIf
If($d = "XXI") Then
$annee = "2005"
EndIf
If($d = "XXII") Then
$annee = "2006"
EndIf
If($d = "XXIII") Then
$annee = "2007"
EndIf
If($d = "XXIV") Then
$annee = "2008"
EndIf
If($d = "XXV") Then
$annee = "2009"
EndIf
If($d = "XXVI") Then
$annee = "2010"
EndIf
If($d = "XXVII") Then
$annee = "2011"
EndIf
If($g = "A") Then
$msgbox = ("Ce Zippo date de Janvier "&$annee)
EndIf
If($g = "B") Then
$msgbox = ("Ce Zippo date de Février "&$annee)
EndIf
If($g = "C") Then
$msgbox = ("Ce Zippo date de Mars "&$annee)
EndIf
If($g = "D") Then
$msgbox = "Ce Zippo date de Avril "&$annee)
EndIf
If($g = "E") Then
$msgbox = ("Ce Zippo date de Mai "&$annee)
EndIf
If($g = "F") Then
$msgbox = ("Ce Zippo date de Juin "&$annee)
EndIf
If($g = "G") Then
$msgbox = ("Ce Zippo date de Juillet "&$annee)
EndIf
If($g = "H") Then
$msgbox = ("Ce Zippo date de Aout "&$annee)
EndIf
If($g = "I") Then
$msgbox = ("Ce Zippo date de Septembre "&$annee)
EndIf
If($g = "J") Then
$msgbox = ("Ce Zippo date de Octobre "&$annee)
EndIf
If($g = "K") Then
$msgbox = ("Ce Zippo date de Novembre "&$annee)
EndIf
If($g = "L") Then
$msgbox = ("Ce Zippo date de Décembre "&$annee)
EndIf
If($g = "") Then
$msgbox = "Les carractères saisis sont incorrectes"
EndIf
MsgBox(0,"Zippo",$msgbox)
EndSwitch
WEnd
Ca permet de dater les Zippo.
C'est moi qui l'ai fait.
Re: [..] Lire un dossier
Posté : sam. 11 juin 2011 20:28
par Zippo
Superbe idée, mais il y a quelque bug, pas très grave mais y'en a quand même du coup je ne peux pas le testé ^^