Page 1 sur 1

Probleme d'execution d'action successives

Posté : mar. 30 juin 2020 15:32
par tilo456
Bonjour,

je voulais faire un script qui affiche une liste dans une fenêtre, pouvoir modifier cette liste et l'enregistrer.

le problème c'est que après avoir enregistrer, je me suis aperçu que la liste était doublée.

j'ai voulu modifier cela en enregistrant le fichier sous un autre nom aa un autre emplacement (en tmp.txt) puis copié le tmp.txt au bon emplacement en changeant son nom.

mais voila le probleme est que l'action d'enregistrer s'effectue mais les action suivantes non...

Voila mon Script:

Code : Tout sélectionner

#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>

$Form = GUICreate("Ajout d'un TAG", 265, 396, 650, 115, $WS_EX_TOPMOST)
$Edit = GUICtrlCreateEdit("", 8, 64, 252, 321)

;$Input = GUICtrlCreateInput("", 32, 24, 265, 21)
$Open = GUICtrlCreateButton("Ouvrir", 8, 24, 75, 25, 0)
$Save = GUICtrlCreateButton("Sauver", 95, 24, 75, 25, 0)
$QUIT = GUICtrlCreateButton("Quitter", 180, 24, 75, 25, 0)
;$Button3 = GUICtrlCreateButton("Nouveau", 488, 24, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
        Switch $nMsg
    Case -3
        Exit
    Case $Open
        $liste = ("AUTOIT\inventaire\liste\liste.txt")
        If @error Then
            MsgBox(4096,"","La liste est introuvable")
        Else
;           GUICtrlSetData($Input,$liste)
            $open = FileOpen($liste,0)
            $read = FileRead($liste)
            FileClose($liste)
            GUICtrlSetData($Edit,$read)
        EndIf
    Case $Save
		$readctrl = GUICtrlRead($Edit)
		FileWrite("AUTOIT\inventaire\liste\tmp\tmp.txt",$readctrl)
		FileCopy("AUTOIT\inventaire\liste\tmp\tmp.txt", "AUTOIT\inventaire\liste\liste.txt",9)
		;FileDelete("AUTOIT\inventaire\liste\liste1.txt")

		Exit

	Case $QUIT
		Exit

;    Case $Button3
;        GUICtrlSetData($Edit,"")
		EndSwitch
WEnd
si l'un de vous vois mon erreur je suis preneur

Re: Probleme d'execution d'action successives

Posté : mar. 30 juin 2020 15:44
par jchd
L'aide de FileWrite dit bien, bille en tête :
Écrit du texte ou des données à la fin d'un fichier précédemment ouvert.

Re: Probleme d'execution d'action successives

Posté : mar. 30 juin 2020 15:53
par tilo456
mais le filewrite fonctionne c'est après que ça bloque

Re: Probleme d'execution d'action successives

Posté : mar. 30 juin 2020 17:22
par tilo456
plus exactement c'est le FileCopy qui ne s’exécute pas

Re: Probleme d'execution d'action successives

Posté : mar. 30 juin 2020 21:29
par mikell
Ce que jchd veut dire (je crois..) c'est que FileOpen et son mode ça peut servir quand on veut lire un fichier mais aussi quand on veut écrire dedans :idea:

Re: Probleme d'execution d'action successives

Posté : mer. 01 juil. 2020 00:32
par jchd
Je voulais dire que si la liste est doublée (cf OP) c'est parce que FileWrite fait en fait un Append.
Ensuite le reste n'est qu'un kludge pour contourner le problème ci-dessus.

Re: Probleme d'execution d'action successives

Posté : mar. 07 juil. 2020 09:20
par tilo456
OK je comprend.
Du coups c'est ce que j'ai voulu faire en faisant en sorte qu'il créé un nouveau fichier mais supprime l'ancien, renomme le nouveau avec le nom de l'ancien.
Mais le problème c'est que rien ne s’exécute...

Re: Probleme d'execution d'action successives

Posté : mar. 07 juil. 2020 14:47
par walkson
Bonjour,
Tout d'abord "AUTOIT\inventaire\liste\tmp\tmp.txt" n'est pas un chemin complet
En suite FileCopy() est inutile.
Le mode d'écriture comme l'indique Mikell, est désigné par FileOpen().
Soit il est en écriture $FO_APPEND (1) = Mode écriture (ajoute à la fin du fichier) et vous rajouter du texte au texte.
Soit vous écrasez le texte par le nouveau $FO_OVERWRITE (2) = Mode écriture (efface le contenu précédent) et vous remplacez le texte par le nouveau.
Pour résumer, vous lisez l'édit, vous ouvrez le fichier en mode overwrite, vous écrivez le texte et vous fermez le fichier.
Autre point,
 $liste = ("AUTOIT\inventaire\liste\liste.txt")      
 If @error Then
            MsgBox(4096,"","La liste est introuvable")
        Else
attribuer une valeur à une variable ne constitue pas une erreur et ne vérifie pas si le chemin existe (voir FileExiste())
Dans le cas présent, je peux vous dire que le chemin n'existe pas puisqu'il est incomplet :P