J'ai bien trouvé la fonction DirGetSize pour la taillle, mais rien qui s'appelle DirGetName...

Votre question et des plus étrange.Zelcorwin a écrit :Je n'ai pas vu dans l'aide d'AutoIt, rubrique "Function reference/File, Directory and Disk Management" de fonction qui permette de récupérer le nom d'un dossier dans une variable.
J'ai bien trouvé la fonction DirGetSize pour la taillle, mais rien qui s'appelle DirGetName...
Code : Tout sélectionner
$MonRep = "C:\Windows\System32"
AutoIt est donc fait pour vous (C'est une plume d'oie automatique)Zelcorwin a écrit :J'ai essayé de résoudre ça dans FirstClass mais rien à faire (nous sommes plusieurs à trouver la procédure très lourde). Bien sûr je peux faire tout cela à la main, mais autant recopier les messages à la plume d'oie...
Oui.Zelcorwin a écrit :J'aimerais créer un programme qui me demanderait où sont mes messages (je saisirais le chemin de "Messages"), qui lirait le nom de tous les sous-dossiers, qui attriburait ce nom à un des fichiers (le rtf, par exemple), qui ferait un couper/coller de ces fichiers hors des sous-dossiers et à la racine de "Messages" et qui effacerait ensuite tous les sous-dossiers...
Est-ce possible ?
Code : Tout sélectionner
#include <GUIConstants.au3>
$SRoadLauncher = "Chemin des messages"
$LauncherGUI = GUICreate ( "Boîte à messages" , 600 , 100 )
$LauncherLabel = GUICtrlCreateLabel ( " Où sont-ils ? " , 10 , 30 , 80 , 40 )
$LauncherInput = GUICtrlCreateInput ( $SRoadLauncher , 80 , 30 , 400 , 18 , $ES_READONLY )
$LauncherSearch = GuICTRLCreateButton ( " Chercher " , 485 , 30 , 65 , 20 )
GUISetState ( @SW_SHOW )
while 1
$msg = GuiGetmsg ( )
Select
Case $msg = $LauncherSearch
$path = FileSelectFolder ( "Où se trouvent vos messages ? ( Merci de sélectionnez le dossier ) " , " " )
if Not @error Then GUICtrlSetData ( $LauncherInput , $path )
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Code : Tout sélectionner
$Btn_OK = GUICtrlCreateButton ( "OK" , 230 , 70 , 55 , 25 )
Code : Tout sélectionner
Case $msg = $Btn_OK
Msgbox ( 0 , "" , "Vous avez cliquer OK" )
Exit
Code : Tout sélectionner
#include <GUIConstants.au3>
$SRoadLauncher = "Chemin des messages"
$LauncherGUI = GUICreate ( "Boîte à messages" , 600 , 100 )
$LauncherLabel = GUICtrlCreateLabel ( " Où sont-ils ? " , 10 , 30 , 80 , 40 )
$LauncherInput = GUICtrlCreateInput ( $SRoadLauncher , 80 , 30 , 400 , 18 , $ES_READONLY )
$LauncherSearch = GuICTRLCreateButton ( " Chercher " , 485 , 30 , 65 , 20 )
$Btn_OK = GUICtrlCreateButton ( "OK" , 230 , 70 , 55 , 25 )
$Btn_Annuler = GUICtrlCreateButton ( "Annuler" , 330 , 70 , 55 , 25 )
GUISetState ( @SW_SHOW )
while 1
$msg = GuiGetmsg ( )
Select
Case $msg = $LauncherSearch
$path = FileSelectFolder ( "Où se trouvent vos messages ? ( Merci de sélectionner le dossier ) " , " " )
if Not @error Then GUICtrlSetData ( $LauncherInput , $path )
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $Btn_OK
Msgbox ( 0 , "" , "Vous avez cliqué sur OK" )
Exit
Case $msg = $Btn_Annuler
Msgbox ( 0 , "" , "Vous avez cliqué sur Annuler" )
Exit
EndSelect
WEnd
Code : Tout sélectionner
#include <GUIConstants.au3>
$LauncherGUI = GUICreate("Boîte à messages", 370, 100)
$LauncherLabel = GUICtrlCreateLabel(" Où sont-ils ? ", 10, 30, 80, 40)
$LauncherInput = GUICtrlCreateInput("Chemin des messages", 80, 30, 200, 18)
$LauncherSearch = GUICtrlCreateButton(" Chercher ", 285, 30, 65, 20)
$Btn_OK = GUICtrlCreateButton("OK", 230, 70, 55, 25)
$Btn_Annuler = GUICtrlCreateButton("Annuler", 300, 70, 55, 25)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Btn_OK
Msgbox(0,"","Vous avez cliquer OK")
Exit
Case $msg = $Btn_Annuler
Exit
Case $msg = $LauncherSearch
$path = FileSelectFolder("Où se trouvent vos messages ? (Merci de sélectionnez le dossier) ", " ")
If Not @error Then
GUICtrlSetData($LauncherInput, $path)
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput), "", 0, 1)
EndIf
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
C'est tout à fait ça.Maintenant, il va falloir lire les noms des sous-dossiers dans le dossier "Messages", je pensais à l'équivalent de dir en dos avec récupération dans un tableau, mais peut-être y a-t-il plus simple...
Code : Tout sélectionner
_FileListToArray ( $sPath [, $sFilter [, $iFlag]] )
Code : Tout sélectionner
_FileListToArray (GUICtrlRead($LauncherInput), "*", 2)
Code : Tout sélectionner
_ArrayDisplay($DirList)
Code : Tout sélectionner
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput), "", 0, 1)
Code : Tout sélectionner
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput))
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <File.au3>
#include <Array.au3>
$LauncherGUI = GUICreate("Boîte à messages", 370, 100)
$LauncherLabel = GUICtrlCreateLabel(" Où sont-ils ? ", 10, 30, 80, 40)
$LauncherInput = GUICtrlCreateInput("Chemin des messages", 80, 30, 200, 18)
$LauncherSearch = GUICtrlCreateButton(" Chercher ", 285, 30, 65, 20)
$Btn_OK = GUICtrlCreateButton("OK", 230, 70, 55, 25)
$Btn_Annuler = GUICtrlCreateButton("Annuler", 300, 70, 55, 25)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Btn_OK
Msgbox(0,"","Vous avez cliqué OK")
Exit
Case $msg = $Btn_Annuler
Exit
Case $msg = $LauncherSearch
$path = FileSelectFolder("Où se trouvent vos messages ? (Merci de sélectionnez le dossier) ", " ")
If Not @error Then
GUICtrlSetData($LauncherInput, $path)
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput))
$DirList=_FileListToArray (GUICtrlRead($LauncherInput), "*", 2)
_ArrayDisplay($DirList,"Tableau des messages")
EndIf
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Code : Tout sélectionner
#include <Array.au3>
Cool.Zelcorwin a écrit :Ca se présente bien (en interprété)
C'est fait exprès.Zelcorwin a écrit :mais la première ligne du tableau affiché (indice 0) contient le nombre n de sous-dossiers, je n'ai pas trouvé de fonction type Dim pour dire si on commence à 0 ou à 1.
Et bien oui, avec une bonne boucle FOR vous récupérerez chacun des éléments du tableau.Zelcorwin a écrit :Et même finalement, c'est bien d'avoir n, on peut s'en servir pour boucler dessus...
Code : Tout sélectionner
While 1
$msg = GUIGetMsg() ; intercepte l'action de l'utilisateur
Select ; choix multiple
Case $msg = $Btn_OK ; si je clique sur "OK"
$rep = Msgbox(20,"Extraction des fichiers messages","Etes-vous sûr ?") ; crée une boîte d'avertissement oui/non
If $rep = 6 Then ; si oui
For $i=1 to $DirList[0]
FileMove(GUICtrlRead($LauncherInput)&"\"&$DirList[$i]&"\"&"content.rtf", _
GUICtrlRead($LauncherInput)&"\"&$DirList[$i]&".rtf")
; je déplace le message i à la racine de Messages et j'en profite pour lui changer son nom
DirRemove(GUICtrlRead($LauncherInput)&"\"&$DirList[$i],1)
; je supprime le dossier i correspondant
Next
Else
Exit
EndIf
Exit
Case $msg = $Btn_Annuler ; si je clique sur "Annuler"
Exit
Case $msg = $LauncherSearch ; si je clique sur "Chercher"
$path = FileSelectFolder("Où se trouvent vos messages ? (Merci de sélectionnez le dossier) ", " ")
If Not @error Then
GUICtrlSetData($LauncherInput, $path) ; met dans $LauncheInput le bon chemin du dossier Messages
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput)) ; ?
$DirList=_FileListToArray (GUICtrlRead($LauncherInput), "*", 2) ; met dans un tableau les noms des sous-dossiers
;_ArrayDisplay($DirList,"Tableau des messages") ; affiche les noms de ces sous-dossiers
EndIf
Case $msg = $GUI_EVENT_CLOSE ; si je ferme la fenêtre
Exit
EndSelect
WEnd
Pour palier à ce problème, nous allons faire simple.Zelcorwin a écrit :je ne sais pas s'il est utilisable tel que (une fois compilé) :
-> car il présente des failles : on peut par exemple dire OK alors qu'on n'a pas choisi de chemin, où mettre un faux chemin : la ligne DirRemove va faire alors des dégâts ...
Code : Tout sélectionner
$LauncherInput = GUICtrlCreateInput("Chemin des messages", 80, 30, 200, 18, $ES_READONLY)
Code : Tout sélectionner
$Btn_OK = GUICtrlCreateButton("OK", 230, 70, 55, 25, $WS_DISABLED)
Code : Tout sélectionner
Case $msg = $LauncherSearch
$path = FileSelectFolder("Où se trouvent vos messages ? (Merci de sélectionnez le dossier) ", " ")
If Not @error And FileExists($Path) Then
GUICtrlSetState($Btn_OK, $GUI_ENABLE) ; Active le bouton Ok.
GUICtrlSetData($LauncherInput, $path)
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput))
EndIf
A rajouter dans la partie GUI, avant le GUISetState(@SW_SHOW) :Zelcorwin a écrit :j'aimerais bien laisser le choix à l'utilisateur du type de fichier message à sauvegarder (txt, rtf ou xml) mais je ne sais pas faire des boutons radios dans la boîte de dialogue...
Code : Tout sélectionner
$TXT = GUICtrlCreateRadio("TXT", 20, 70, 49, 17)
GUICtrlSetState(-1, $GUI_CHECKED) ; Pour choisir TXT par défaut.
$RTF = GUICtrlCreateRadio("RTF", 80, 70, 49, 17)
$XML = GUICtrlCreateRadio("XML", 140, 70, 49, 17)
Code : Tout sélectionner
If BitAND(GUICtrlRead($TXT), $GUI_CHECKED) = $GUI_CHECKED Then MsgBox(0,"Info","Vous avez choisit TXT")