[R] Lire le nom d'un dossier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Lire le nom d'un dossier
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...
J'ai bien trouvé la fonction DirGetSize pour la taillle, mais rien qui s'appelle DirGetName...
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: Lire le nom d'un dossier
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...
Vous voulez récupérer le nom d'un répertoire avec une fonction du genre : DirGetName, mais pour cela il faudrait lui indiquer le chemin, et donc ... le nom du répertoire.
Pour mettre le nom d'un dossier dans une variable, il vous suffit de faire :
Code : Tout sélectionner
$MonRep = "C:\Windows\System32"
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Merci de votre réponse qui met l'accent sur la vanité de ma question...
En fait, le mieux est que j'expose le problème auquel certainement je n'ai pas encore assez réfléchi :
J'utilise un client intranet (FirstClass) qui permet de sauvegarder les messages sous une forme un peu bizarre :
la fonction "Exporter documents" va créer un dossier par message (le nom du dossier est une concaténation du nom de l'expéditeur, du titre du message et de la date) et à l'intérieur du dossier sont créés 3 fichiers contenant la même chose, à savoir le corps du message, mais sous 3 formats différents, un en txt, un en rtf et un xml, avec toujours le même nom "content".
Je trouve ça très lourd et j'aimerais bien avoir directement un seul fichier par message (par exemple le fichier rtf), tous les messages dans un dossier de mon choix et le nom du fichier permettant d'identifier le message (style expéditeur-titre-date)...
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...
J'avais pensé au départ faire un batch avec des fonctions dos type xcopy et rename, mais pour cela il faut pouvoir lire le nom des dossiers, d'où ma question...
C'est alors que j'ai pensé à AutoIt , avec lequel je n'ai rien fait jusqu'ici, mais il me semble qu'il conviendrait bien à ma tâche.
En clair, j'ai pour l'instant tous mes messages dans un dossier "Messages" qui contient un sous-dossier par message contenant les trois fichiers. 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 ?
En fait, le mieux est que j'expose le problème auquel certainement je n'ai pas encore assez réfléchi :
J'utilise un client intranet (FirstClass) qui permet de sauvegarder les messages sous une forme un peu bizarre :
la fonction "Exporter documents" va créer un dossier par message (le nom du dossier est une concaténation du nom de l'expéditeur, du titre du message et de la date) et à l'intérieur du dossier sont créés 3 fichiers contenant la même chose, à savoir le corps du message, mais sous 3 formats différents, un en txt, un en rtf et un xml, avec toujours le même nom "content".
Je trouve ça très lourd et j'aimerais bien avoir directement un seul fichier par message (par exemple le fichier rtf), tous les messages dans un dossier de mon choix et le nom du fichier permettant d'identifier le message (style expéditeur-titre-date)...
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...
J'avais pensé au départ faire un batch avec des fonctions dos type xcopy et rename, mais pour cela il faut pouvoir lire le nom des dossiers, d'où ma question...
C'est alors que j'ai pensé à AutoIt , avec lequel je n'ai rien fait jusqu'ici, mais il me semble qu'il conviendrait bien à ma tâche.
En clair, j'ai pour l'instant tous mes messages dans un dossier "Messages" qui contient un sous-dossier par message contenant les trois fichiers. 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 ?
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
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 ?
Commencez par créer une interface simple qui vous demandera le chemin de "Message", et poster votre code (On va le construire au fur et à mesure).
Inspirez vous de ce code : http://www.autoitscript.fr/viewtopic.php?p=1515#1515
Si vous n'avez pas besoin d'options, ce n'est pas la peine de créer une GUI (L'interface graphique) mais utilisez seulement les boites de dialogue.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Bon j'ai retouché le code de façon à faire apparaître éventuellement un chemin assez long, car si la longueur du champ visible est trop courte, on ne peut pas voir la droite du chemin même avec la touche Fin (je suppose que ça ne change rien pour la variable stockée, qui est, si j'ai bien compris, $path ?)
J'espère que je n'ai pas trébuché sur cette première marche...
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
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Aller hop, je suis de retour.
Bien votre fenêtre est pas mal mais il faut rajouter un bouton OK et un Annuler qui seront traiter dans la commande select.
Pour créer un bouton :
La variable $Btn_Ok contiendra le controlID du bouton, qui nous permettra de faire plein de chose avec.
ensuite, on peut comparer ce controlID dans la partie Select
Bien votre fenêtre est pas mal mais il faut rajouter un bouton OK et un Annuler qui seront traiter dans la commande select.
Pour créer un bouton :
Code : Tout sélectionner
$Btn_OK = GUICtrlCreateButton ( "OK" , 230 , 70 , 55 , 25 )
ensuite, on peut comparer ce controlID dans la partie Select
Code : Tout sélectionner
Case $msg = $Btn_OK
Msgbox ( 0 , "" , "Vous avez cliquer OK" )
Exit
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Bon ça donne ç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...
Il faut que je quitte, merci encore et sans doute à demain !
PS : je ne sais pas comment inclure .au3 dans la partie code du message : pour afficher sous format code, je sélectionne la partie Code et je clique sur le bouton Code, mais ce n'est peut-être pas la bonne manip...
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
Il faut que je quitte, merci encore et sans doute à demain !
PS : je ne sais pas comment inclure .au3 dans la partie code du message : pour afficher sous format code, je sélectionne la partie Code et je clique sur le bouton Code, mais ce n'est peut-être pas la bonne manip...
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Bien, c'est parfait.
J'ai modifier le code, pour un aspect graphique différent, et j'ai ajouter une nouvelle notion : le GUICtrlSetTip, qui permet d'afficher une bulle d'information avec le contenu complet du GuiCtrlCreateInput.
Et pour ce faire, nous allons utiliser la fonction : _FileListToArray
Pour pouvoir utiliser cette fonction, nous aurons besoin de dire à AutoIt ou elle ce trouve.
Cette fonction ce trouve dans l'UDF File.au3. Il nous faut donc rajouter dans notre code : #include <File.au3>
Pour les besoins de l'explication, nous allons aussi rajouter #include <Array.au3>, qui nous permettra d'utiliser la fonction _ArrayDisplay pour visualiser la liste des répertoires.
Ensuite, pour avoir la liste des sous répertoire d'un répertoire, nous utilisons donc :
Pour le filtre et le flag, cela est facile, puisque l'on veut tous les sous répertoire, et seulement les répertoires.
Donc $sFilter = "*" et $iFlag = 2.
Par contre pour le chemin ca ce complique, puisque le chemin est dans un contrôle. certes on peut utiliser la variable $path, mais qui nous dit que l'utilisateur n'à pas modifier le chemin à la main (Bouuh le vilain ...).
Il va nous falloir lire le contenu du contrôle.
Une commande toute simple, va nous permettre ceci : GUICtrlRead
Cela va nous permettre de créer une ligne comme ceci :
Par contre si on oublie d'attribuer le résultat à une variable, cela ne nous servira à rien.
Attribuez donc le résultat de la commande à la variable $DirList par exemple, et pour finir affichons cette liste :
Voilà en regardant le résultat du tableau, vous imaginez peut être la suite ...
J'ai modifier le code, pour un aspect graphique différent, et j'ai ajouter une nouvelle notion : le GUICtrlSetTip, qui permet d'afficher une bulle d'information avec le contenu complet du GuiCtrlCreateInput.
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...
Et pour ce faire, nous allons utiliser la fonction : _FileListToArray
Pour pouvoir utiliser cette fonction, nous aurons besoin de dire à AutoIt ou elle ce trouve.
Cette fonction ce trouve dans l'UDF File.au3. Il nous faut donc rajouter dans notre code : #include <File.au3>
Pour les besoins de l'explication, nous allons aussi rajouter #include <Array.au3>, qui nous permettra d'utiliser la fonction _ArrayDisplay pour visualiser la liste des répertoires.
Ensuite, pour avoir la liste des sous répertoire d'un répertoire, nous utilisons donc :
Code : Tout sélectionner
_FileListToArray ( $sPath [, $sFilter [, $iFlag]] )
Donc $sFilter = "*" et $iFlag = 2.
Par contre pour le chemin ca ce complique, puisque le chemin est dans un contrôle. certes on peut utiliser la variable $path, mais qui nous dit que l'utilisateur n'à pas modifier le chemin à la main (Bouuh le vilain ...).
Il va nous falloir lire le contenu du contrôle.
Une commande toute simple, va nous permettre ceci : GUICtrlRead
Cela va nous permettre de créer une ligne comme ceci :
Code : Tout sélectionner
_FileListToArray (GUICtrlRead($LauncherInput), "*", 2)
Attribuez donc le résultat de la commande à la variable $DirList par exemple, et pour finir affichons cette liste :
Code : Tout sélectionner
_ArrayDisplay($DirList)
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ça y est, je reprends mon exercice !
J'ai eu quelques problèmes :
la syntaxe :
n'est pas reconnue, il semble qu'il y ait trop de paramètres. En ne laissant que les deux premiers :
le code est reconnu mais je ne vois rien de changé quand je pointe avec la souris... mais au fait sur quoi dois-je pointer pour que l'info-bulle apparaisse ? A quel moment doit-elle apparaître, la place de cette ligne de code signfie que cette info-bulle ne serait disponible qu'après avoir choisi le chemin...
J'ai eu quelques problèmes :
la syntaxe :
Code : Tout sélectionner
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput), "", 0, 1)
Code : Tout sélectionner
GUICtrlSetTip($LauncherInput, GUICtrlRead($LauncherInput))
Sinon j'ai inclus les librairies nécessaires à l'exécution des fonctions ajoutées, ce qui donne le code suivant :
Ca se présente bien (en interprété), j'ai bien l'affichage de tous mes messages, 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. Bon, c'est pas grave, le but étant de récupérer les n textes et de les attribuer au nom de l'un des fichiers de chaque sous-dossier. Et même finalement, c'est bien d'avoir n, on peut s'en servir pour boucler dessus...
Je commence à entrevoir le début d'une ébauche de solution !!!
Cordialement
PS : je n'arrive toujours pas à afficher les ".au3" dans les include, alors que je les ai collés dans la fenêtre, ils disparaissent dès la pré-visualisation de ce message...
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
Je commence à entrevoir le début d'une ébauche de solution !!!
Cordialement
PS : je n'arrive toujours pas à afficher les ".au3" dans les include, alors que je les ai collés dans la fenêtre, ils disparaissent dès la pré-visualisation de ce message...
Ok, merci pour le conseil... je ne résiste pas à l'envie d'essayer :
ça marche !
Cordialement
Zelcorwin
Code : Tout sélectionner
#include <Array.au3>
Cordialement
Zelcorwin
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
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.
La plupart des commandes qui retourne un tableau mettent en indice 0 le nombre d'éléments du tableau.
ATTENTION : Ce n'est pas un cas général.
Parfois d'autres fonctions commence le tableau à l'indice 0 !!!
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...
Un élément ce traduit comme ceci : $tableau[indice]
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Ça avance ! Le programme fonctionne impeccable ! Je reprends juste la zone que j'ai retouchée depuis la dernière fois :
Un grand merci à Tlem dont l'appui a été plus que décisif ! J'ai été surpris par l'efficacité d'AutoIt et la facilité de la mise en oeuvre de l'interface utilisateur !
PS : 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 ...
-> 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...
Salutations
Zelcorwin
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
PS : 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 ...
-> 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...
Salutations
Zelcorwin
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
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 ...
Tout d'abord, pour rendre le code pas trop compliquer, nous allons mettre $LauncherInput en lecture seule, comme cela l'utilisateur sera obliger de cliquer 'Chercher'.
Alors, pour mettre $LauncherInput en lecture seul, corriger la ligne comme ceci :
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")
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".