Page 1 sur 2

Supprimer des Include extraits à la fermeture du programme

Publié : lun. 31/oct./2016 21:52
par NY152
Bonjour,

Je cherche à supprimer des fichier IncludeBinary extraits à la fermeture d'un programme mais ce dernier plante bien que les fichier soit bien supprimés.

Voilà le code de sortie que j'ai écris :

Code : Tout sélectionner

If Event = #PB_Event_CloseWindow
      DeleteFile("File01.bin")
      DeleteFile("File02.bin")
      DeleteFile("File03.bin")
      Sleep_(500)
      Quit = 1
    EndIf
  Until Quit = 1
Si quelqu'un peut me dire où et pourquoi ça coince.

D'avance, merci

Re: Supprimer des Include extraits à la fermeture du program

Publié : lun. 31/oct./2016 21:57
par falsam
Peut etre comme ça

Code : Tout sélectionner

Enumeration Window
  #mainForm
EndEnumeration

;Plan de l'application
Declare Start()
Declare Exit()
Declare Finish()
Start()

Procedure Start()
  OpenWindow(#mainForm, 0, 0, 500, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Exit()  
  End Finish()
EndProcedure

Procedure Finish()
  Debug "Wait a minute ..... "
  DeleteFile("File01.bin", #PB_FileSystem_Force)
  DeleteFile("File02.bin", #PB_FileSystem_Force)
  DeleteFile("File03.bin", #PB_FileSystem_Force)
EndProcedure

Re: Supprimer des Include extraits à la fermeture du program

Publié : lun. 31/oct./2016 22:02
par Ollivier

Code : Tout sélectionner

Procedure FileDelete(FileName.S)
        If FileSize(FileName) >= 0
                DeleteFile(FileName)
        EndIf
EndProcedure
A part ça, le "Sleep_()" te sert à quoi par rapport à "Delay()" ?

Re: Supprimer des Include extraits à la fermeture du program

Publié : lun. 31/oct./2016 23:06
par NY152
falsam a écrit :Peut etre comme ça

Code : Tout sélectionner

Enumeration Window
  #mainForm
EndEnumeration

;Plan de l'application
Declare Start()
Declare Exit()
Declare Finish()
Start()

Procedure Start()
  OpenWindow(#mainForm, 0, 0, 500, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Exit()  
  End Finish()
EndProcedure

Procedure Finish()
  Debug "Wait a minute ..... "
  DeleteFile("File01.bin", #PB_FileSystem_Force)
  DeleteFile("File02.bin", #PB_FileSystem_Force)
  DeleteFile("File03.bin", #PB_FileSystem_Force)
EndProcedure
Parfait ! Ce code fonctionne parfaitement, merci à toi ^^
Ollivier a écrit :

Code : Tout sélectionner

Procedure FileDelete(FileName.S)
        If FileSize(FileName) >= 0
                DeleteFile(FileName)
        EndIf
EndProcedure
A part ça, le "Sleep_()" te sert à quoi par rapport à "Delay()" ?
En essayant ton code, il générait toujours le plantage. Pourquoi ? Je suis incapable de le dire.

Quant à utiliser Sleep_() au lieu de Delay(), par habitude ; Je sais, c'est mal, je ne le ferais plus ^^

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 14:54
par Ollivier
@NY152

Je ne sais pas non plus, vu que je n'ai pas testé.
Falsam a très bien répondu en intégrant 3 notions :
1) Le "BindEvent"
2) Le "#FileSystem_Force"
3) Le "End VariableDeRetourDeProcedure"

Ce qui serait bien c'est que tu testes les 3 solutions à part pour savoir exactement où était le problème.

Je pense que le #FileSystem_Force semble être ce qui a résolu le souci, mais c'est à vérifier. Si c'est ça, je ne connaissais pas et on aurait bien galéré car je crois que DeleteFile n'a pas de variable de retour.

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 15:41
par Ar-S
@Ollivier
Renvoie une valeur non nulle si l'opération a réussi, zéro sinon.

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 17:17
par Marc56
Je cherche à supprimer des fichier IncludeBinary...
:?:
IncludeBinary sert normalement à inclure des fichiers binaires lors de la compilation il est donc normal de ne pouvoir les supprimer pendant cette phase.
Ou alors j'ai mal compris l'usage que tu veux faire :|

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 17:24
par Ar-S
C'est vrai que sa phrase est bizarre effacer des includes extraits...
Je pense que ce sont peut être des fichiers genre DLL comme fmod ou autre que son exe utilise mais qu'il extrait à chaque ouverture du fichier, du coup il veut les effacer (les fichiers extraits pas les includes).

Sinon il y a une fonction isFile()..
Deletemachin
; vérif avec if isfile(..) = 0
Alors Exit

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 17:36
par Zorro
je ne comprends pas cette procedure ! (telle qu'elle est ecrite dans le code proposé par Falsam)

Code : Tout sélectionner

Procedure Exit() 
  End Finish()
EndProcedure

en principe ça devrait envoyer une erreur de syntaxe

il manque ":"

et de plus , vu que le END se situe en premiere position ;
l'appel de la fonction Finish(), n'a jamais lieu !

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 17:54
par Ar-S
Le End Finish() sent effectivement l'oublie de retour à la ligne.
Je suis d'accord avec toi, aprés le end je vois pas trop pourquoi le programme exécuterait le reste.

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 18:26
par Marc56
Ar-S a écrit : Sinon il y a une fonction isFile()..
Deletemachin
; vérif avec if isfile(..) = 0
Alors Exit
Pas forcement pour le même usage: IsFile ne teste que l'initialisation du fichier (handle ok) et pas la présence (FileSize)

:wink:

Re: Supprimer des Include extraits à la fermeture du program

Publié : mar. 01/nov./2016 22:09
par Ollivier
@Ar-S

Ah, ben merde, j'avais pas vu! J'ai confondu avec les FreeObjet.

Re: Supprimer des Include extraits à la fermeture du program

Publié : mer. 02/nov./2016 11:51
par NY152
Ar-S a écrit :C'est vrai que sa phrase est bizarre effacer des includes extraits...
Je pense que ce sont peut être des fichiers genre DLL comme fmod ou autre que son exe utilise mais qu'il extrait à chaque ouverture du fichier, du coup il veut les effacer (les fichiers extraits pas les includes).

Sinon il y a une fonction isFile()..
Deletemachin
; vérif avec if isfile(..) = 0
Alors Exit
Oui c'est bien pour extraire des dépendances mais si je veux absolument les retirer c'est par soucis de clarté (c'est programme personnel (stocké sur clé USB) non destiné à être distribué donc je cherche pas à optimiser)

Re: Supprimer des Include extraits à la fermeture du program

Publié : mer. 02/nov./2016 12:03
par Zorro
ton plantage venais probablement u fait que tu n'utilisais pas

Code : Tout sélectionner

 DeleteFile("File01.bin", #PB_FileSystem_Force)
et notamment le "#PB_FileSystem_Force"
qui force l'effacement du fichier meme si'l est pris par une autre application

cependant, je me demande dans quel mesure Windows ne peut pas bloquer quand meme
une histoire de droit d'ecriture

car ton prg "pond" ses fichiers , et du coup, il en est le proprio
et tant qu'il est actif, ses fichiers sont "bloqués" par lui meme
peut etre qu'une simple attente (Delay(1000)) avant d'utiliser les fonctions d'effacements

Code : Tout sélectionner

 DeleteFile("File01.bin", #PB_FileSystem_Force)
devrai etre suffisant


car si tu envoies le tout sans attente , alors effectivement, ton prg peut aller plus vite que le disque dur

ton prg pond les fichiers, et pendant ce temps , car ça prends du temps d’écrire sur un disque dur
ton prg lui est deja passé a l'effacement ... probleme, l’écriture est encore en train de se faire
(le buffer du disque n'a pas fini de se vider ... )

du coup windows interdit l'effacement, puisque le fichier est encore en cours d’écriture !!!

je te conseille de mettre des attentes, lorsque tu fait des écritures ..... effacement
Delay() conviens tres bien pour ça :)

donc en principe ceci devrai suffire a resoudre le probleme :

Code : Tout sélectionner

Procedure Finish()
  Debug "Wait a minute ..... "
Delay(4000) ; on attends 4 secondes pour etre sur que ces fichiers soient bien libérés
  DeleteFile("File01.bin", #PB_FileSystem_Force)
  DeleteFile("File02.bin", #PB_FileSystem_Force)
  DeleteFile("File03.bin", #PB_FileSystem_Force)
EndProcedure

Re: Supprimer des Include extraits à la fermeture du program

Publié : mer. 02/nov./2016 12:31
par NY152
#PB_FileSystem_Force suffit, j'ai des Delay() dans mon code et RunProgram() avec #PB_Program_Wait

Alors pourquoi juste ce #PB_FileSystem_Force passe et pas sans, aucune idée.

Les fichiers inclus n'ont que l'attribut Archive et il en est de même quand mon programme les extraits.

Que le programme n'arrive pas les supprimer est une chose, mais que le programme plante salement ...