Page 1 sur 1

[R] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 17:27
par Flop
bonjour à tous, dans mon script

je télécharge un fichier png, je l'affiche dans une seconde gui, et quand je quitte la seconde gui, impossible de supprimer le fichier, si j'essaye avec windows, il me dit fichier en cours d'utilisation, alors que de mon script, a ce moment la j'en ai plus besoin et surtout je veux le supprimer. comment faire pour outrepasser ce problème.

Merci d'avance

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 17:58
par Tlem
2 solutions :

1 - Téléchargez l'image dans le TempDir et ne vous en occupé pas (elle sera supprimée après un nettoyage du PC)

2 - Avant de quitter votre 2ieme GUI, attribuez une image vide à votre contrôle puis essayez de supprimer l'image.

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 19:33
par Flop
je n'y arrive pas, voici le code qui creer ma deuxieme GUI, l'image qu'il faudrait supprimer est covers_existante.png

Tant que je n'ai pas quitter mon prog, windows refuse de supprimer l'image

j'ai essayer de la faire télécharger dans @tempdir, mais ca ne change rien

Code : Tout sélectionner

Func GUIReplace($where, $lang)
    
    $filesize = InetGetSize("http://mon site/" & $lang & "/" & $where)
    ; téléchargement de la covers existante

    
    InetGet("http://mon site/" & $lang & "/" & $where, @ScriptDir & "\covers_existante.png", 1, 1)
    ProgressOn("MeeUploadNiceCovers", "Téléchargement de la covers", "1%")
    
    While @InetGetActive
        $percent = Int((@InetGetBytesRead / $filesize) * 100)
        ProgressSet($percent, $percent & " %")
        Sleep(100)
    WEnd
    
    ProgressOff()
    
    _GDIPlus_Startup()
    
    $image_covers_1 = _GDIPlus_ImageLoadFromFile($fileup)
    $image_covers_2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\covers_existante.png")


    $GUI_covers = GUICreate("Remplacement des covers", 600, 390, -1, -1, $WS_POPUPWINDOW)
    ;GUICtrlCreatePic("", 10, 10, 280, 280)
    GUISetState(@SW_SHOW, $GUI_covers)
    ;-------------------------------------------------------------------
    $quitter_covers = GUICtrlCreateButton("QUITTER", 320, 350, 260)
    GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")

    $remplacer_covers = GUICtrlCreateButton("REMPLACER", 18, 350, 260)
    GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
    
    GUIRegisterMsg($WM_PAINT, "_ReDraw")

    $graphics_covers_1 = _GDIPlus_GraphicsCreateFromHWND($GUI_covers)
    _GDIPlus_GraphicsDrawImageRect($graphics_covers_1, $image_covers_1, 10, 10, 280, 330)

    $graphics_covers_2 = _GDIPlus_GraphicsCreateFromHWND($GUI_covers)
    _GDIPlus_GraphicsDrawImageRect($graphics_covers_2, $image_covers_2, 310, 10, 280, 330)
    
    Sleep(3000)
    
    While 1

        $msg2 = GUIGetMsg($GUI_covers)

        Select
            Case $msg2 = $GUI_EVENT_CLOSE
                GUIDelete($GUI_covers)          IL FAUDRAIS PAR EXEMPLE SUPPRIMER L'IMAGE '(@ScriptDir & "\covers_existante.png")' ICI
                ExitLoop
        EndSelect

        Select
            Case $msg2 = $remplacer_covers
                GUIDelete($GUI_covers)
                $nom_covers_remplacee = $titre[$n2]
                If $lang = "FR" Then
                    UploadFR($where)
                    _Maj_covers()
                    
                    ExitLoop
                Else
                    UploadUS($where)
                    _Maj_covers()
                    ExitLoop
                EndIf
        EndSelect
        
        Select
            Case $msg2 = $quitter_covers
                GUIDelete($GUI_covers)
                ExitLoop
        EndSelect
        
    WEnd
EndFunc   ;==>GUIReplace
 

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 19:48
par timmalos
L'utilisation de _GDIplus impose de fermer tout ce qu'on ouvre, sous peine que le programme plante, ce qui n'est pas le cas ici mais vous nje pouvez pas fermer le programme.

Parcourez l'aide à l'aide de F1, et cherchez les _gdiplus_graphicdispose et pen_dispose et fermez toutes vos variables grâce à ses fonctions. Ensuite vous pourrez supprimer l'image :)
Je n'ai pas trop le temps d'analyser votre script, mais essayer d'analyser un exemple donné avec _gdiplus et vous verrez qu'il faut fermer tous les controles, et ceci en manière generale, c'est une bonne habitude a prendre, et ici si on ne le fait pas, ca cloche :)

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 20:06
par Flop
merci bcq, j'ai résolu mon problème en suivant l'aide.. merci encore

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 20:18
par timmalos
N'oublie pas de modifier ton titre en [R]

Re: [..] Fichier utilisé, impossible de le supprimer

Posté : mer. 26 nov. 2008 20:49
par Tlem
Flop a écrit :j'ai essayer de la faire télécharger dans @tempdir, mais ca ne change rien
Je n'ai pas dit que ça résoudrait votre problème, mais seulement que vous n'auriez pas besoin de vous occupé de l'image car elle serait effacée lors d'un nettoyage du PC.