Supprimer des Include extraits à la fermeture du programme

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Supprimer des Include extraits à la fermeture du programme

Message 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
.:NY152:.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message 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()" ?
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Supprimer des Include extraits à la fermeture du program

Message 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 ^^
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message par Ar-S »

@Ollivier
Renvoie une valeur non nulle si l'opération a réussi, zéro sinon.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Supprimer des Include extraits à la fermeture du program

Message 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 :|
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Supprimer des Include extraits à la fermeture du program

Message 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 !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Supprimer des Include extraits à la fermeture du program

Message 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:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Supprimer des Include extraits à la fermeture du program

Message par Ollivier »

@Ar-S

Ah, ben merde, j'avais pas vu! J'ai confondu avec les FreeObjet.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Supprimer des Include extraits à la fermeture du program

Message 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)
.:NY152:.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Supprimer des Include extraits à la fermeture du program

Message 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
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Supprimer des Include extraits à la fermeture du program

Message 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 ...
.:NY152:.
Répondre