Page 1 sur 1

DeleteFile n'efface pas lorsqu'il est dans une DLL !!

Publié : dim. 24/avr./2005 12:49
par Backup
c'est moi qui comprend rien ou
la fonction DeleteFile ne marche pas !! ??

Code : Tout sélectionner

DeleteFile("D:\PureBasic\dobro\DOBRO_CREATION\NONO2004\tampon.mp3") 
que je mette directement le nom du fichier
ou bien le chemin pour y arriver , la fonction ne m'efface pas le fichier choisie !!!! 8O 8O 8O 8O

quelqu'un peut vérifier ça ??

ps : le fichier en question n'est pas write protected !!

Publié : dim. 24/avr./2005 12:58
par Dräc
Idem! Avec un fichier texte, DeleteFile() retourne la valeur 0

Publié : dim. 24/avr./2005 15:02
par Frenchy Pilou
N'est-ce point une protection pour éviter de faire du carnage sur les disque durs ?
Ou tout du moins demander une fenêtre de validation du choix d'exterminer ces malheureux fichiers ? :)

Publié : dim. 24/avr./2005 17:38
par Le Soldat Inconnu
Je viens de faire ceci et ça marche :
DeleteFile("D:\Téléchargements\Copie de scintilla163.zip")

Essaye manuellement pour voir si Windows ne protège pas le fichier en disant qu'il est utilisé

(XP Pro SP1)

Publié : mar. 26/avr./2005 22:08
par Backup
oui effectivement le pure utilise la version "windows du delete
et lorsque le fichier est "locké " par windows , ben ça efface pas !!

le plus embetant c'est que tu crer un fichier tu ecrit dedans
tu le close , et tu efface !! ben si tu fait tous ça un peut trop rapidement
le pure plante car windows prend son temp pour liberer un fichier meme
lorsque le pure l'a closer !! :?
:D

Merci quand meme , c'est donc pas un bug , mais j'aurai préferé
un vrai delete qui ne tienne pas compte de l'avis de windows !!
comme en dos par exemple !!
il m'arrive encore d'utiliser la console dos de windows pour pouvoir effacer
des fichier corrompu que windows refuse d'effacer meme apres un reboot !!
heuresement qu'il ont gardé cela meme sous xp pro ! :D

Publié : dim. 15/mai/2005 18:28
par Fred
C'est étrange cette histoire de timing, quand une fichier est fermé, il est fermé, je ne vois pourquoi il ne pourrait etre effacé. Tu as un exemple qui illustre le probleme ?

Publié : lun. 16/mai/2005 15:32
par Backup
bon pour mon probleme de fichier , je crois avoir compris
il semble que le pure ne ferme pas les fichiers dans une DLL !!
et peut etre une procedure !! ....

a l'interieur d'une DLL
je creer un fichier , que je prend soin de fermer apres chaque utilisation
par un close , puis un autre , puis un autre , a chaque fois le nouveau fichier crée
est fermé par un close !! , jusque la en principe cela devrai etre bon !

la ou est le probleme c'est que cette DLL est appelé par un programme
je ne ferme pas la dll car je veux pouvoir l'utiliser temps que le programme
qui l'appelle est actif ! (logique) ; donc elle ne s'arrete jamais !
pas de condition de sortie !! sauf si le programme appelant est fermé

et la est le probleme car le fichier généré par ma dll ne disparait
que si je quitte la dll par un END (a l'interieur de la dll) !!! , ce qui d'ailleurs me ferme
aussi mon programe appelant ! ;



:) :?

Publié : lun. 16/mai/2005 18:47
par Backup
je vais craquer !!

apparament la dll conserve locké mon fichier externe crée par elle meme

puisque mem avec windows , je ne peut pas l'éffacé !!
ce qui explique que Deletefile non plus !

j'ai vérifié j'ai bien un openfile et son close a chaque fois !!
(y en a + de 1500 dans nono !! )

en fait ma structure de prg est simple

tout ceci se passe dans une DLL !



ci dessous ça se trouve dans une boucle for-next
ou pour chaque terme trouver j'ecrit l' equivalent en son mp3 " WriteData(?aet +debut_son, longueur)" grace au donnée catché

Code : Tout sélectionner

 If mot.s="aet" Or mot.s="AET" 
        longueur=?aet1-?aet-fin_son -debut_son
        Resultat = OpenFile(#PB_Any, name$)
        If Resultat =0
            MessageRequester("Erreur"," le Tampon ne peut etre ecrit ", #PB_MessageRequester_Ok )
            End 
        EndIf
        FileSeek( Lof()-recouvrement) ; va a la fin du fichier 
        WriteData(?aet +debut_son, longueur) 
        CloseFile(Resultat) 
    EndIf  

y en a pour 1500 sons comme ça ! environ

et a la fin je lit le fichier généré par la routine du dessus
et apres je cherche a effacer ce put*** de fichier !
qui veut plus !! lui il est VIVANT veut pas mourrir !! :D



Code : Tout sélectionner

 ;- nono parle
    If joue=0
        rpp=LoadMovie(1, name$)
        If rpp=0   
            MessageRequester("Erreur"," le fichier Tampon ne peut etre ouvert "+Chr(10)+"(nonoparle)"+Chr(10)+"prévenir dobro en donnant le mot  !", #PB_MessageRequester_Ok )
            Goto term
        EndIf
        
        WindowID = WindowID(10)  
        PlayMovie(1, WindowID )
        
        MovieAudio(100, panoramique)
        Delay (100)
        joue=1
    EndIf  
    test=MovieStatus()
    If test=0  
        FreeMovie(1) 
        Goto term  
    EndIf 
    ; ******************** 
    
Until event=#PB_Event_CloseWindow
    
If event=#PB_Event_CloseWindow
    End
EndIf
    
term:
DeleteFile(name$) 

bizard non ??? 8O

Publié : mar. 17/mai/2005 18:06
par Backup
Fred a écrit :C'est étrange cette histoire de timing, quand une fichier est fermé, il est fermé, je ne vois pourquoi il ne pourrait etre effacé. Tu as un exemple qui illustre le probleme ?
oui je viens de trouver l'exemple qui montre le probleme
tout est dans le code !! y a qu'a lire ! :D

La DLL (a compiller en DLL )

Code : Tout sélectionner

; Le but : 
; cette DLL charge un MP3
; le lit
; et l'éffacer du disk dur !! (en principe ! )


 ; ceci est a compiller en sharedDLL sous le nom "test.dll"
; ATTENTION faite bien une copie de votre MP3
; car ce programme est sensé l'effacer !!! (chose qu'il ne fait pas chez moi ! puisque ça bug !!)

Resultat = InitMovie() 

ProcedureDLL test()
    OpenWindow(10, 0, 0, 320, 200, #PB_Window_SystemMenu , "gros bug ! veut pas effacer les fichiers !!")
    NomFichier$ = OpenFileRequester("film a lire", "c:", "Musiques|*.mp3", 0 ) 
    
    rpp=LoadMovie(1, NomFichier$); on charge un fichier MP3
    If rpp=0   
        MessageRequester("Erreur"," le fichier  ne peut etre ouvert ", #PB_MessageRequester_Ok )
        End
    EndIf 
    
    If rpp<>0 ; le fichier est chargé , on peut le lire 
        WindowID = WindowID(10)  
        MovieAudio(100, panoramique)
        PlayMovie(1, WindowID )  ; oui  on le lit et ça marche 
        Delay (100)  ; on attend un petit peu qu'il ait commencer la lecture
        
       
    EndIf  
    Repeat
        event=WindowEvent()
        Delay(1)
        
        test=MovieStatus() ; le fichier est arreté ??
        If test=0    ; oui cool on va pouvoir voir le BUG !!!
            FreeMovie(1) ; en principe on libere la RAM
            DeleteFile(NomFichier$)  ; et là ; soit disant il efface le fichier !!!  MEME PAS VRAIS !!!! 
            dobro=13 ; ceci est la preuve qu'il a essayé d'effacer !! (   ProcedureReturn dobro )
            ;il n'efface pas le fichier lorsqu'il sagit d'une DLL!!
            Goto fin
        EndIf  
        
    Until event=#PB_Event_CloseWindow 
   ;TANT QUE L'ON NE QUITTE PAS LA DLL
    ; LE FICHIER CHOISIE EST ENCORE LA !!
    ; IL VEUT PAS MOURRIR , IL EST VIVANT
    ; ET VEUT LE RESTER !!!! 
    ; MEME APRES UN  "DeleteFile " !!!!
    ; et un   CloseLibrary(0) dans le programme appelant !!
    
    fin:  ; on force la sortie
   CloseWindow(10)
    ProcedureReturn dobro
EndProcedure



Le Programme qui appel la DLL ci dessus !!

Code : Tout sélectionner

If OpenLibrary(0, "test.dll") 
   Result= CallFunction(0, "test")
   CloseLibrary(0)
     ; si la DLL renvoi 13 c'est qu'elle a essayer d'effacer le fichier avec  DeleteFile(NomFichier$)
    If Result=13
        MessageRequester("Dobro"," il a essayé d'effacer !! "+Chr(10)+"tant que l'on ne quitte pas le programme appelant"+Chr(10)+" (cette fenetre ! ) "+Chr(10)+" et ce meme apres un  CloseLibrary(0) "+Chr(10)+"le fichier n'est pas effacé !! "+Chr(10)+" pourquoi ? ", #PB_MessageRequester_Ok )  
    EndIf 
        ; pourtant il est encore la !!
    ; tant que l'on ne quitte pas le programme appelant !!!
EndIf

Publié : mer. 18/mai/2005 18:23
par Backup
Fred ?? tu as testé l'exemple si dessus ?? 8O 8O

Publié : jeu. 04/août/2005 22:19
par Backup
Fred ?? tu as testé l'exemple si dessus ?? 8O 8O

je fais remonter le topic : alors ?? :)

Publié : jeu. 04/août/2005 23:39
par Jacobus
Est-ce que faire FreeMovie(1) avant le DeleteFile(NomFichier$) n'est pas cause du problème ?
Je me demande si ta variable garde sa valeur après le FreeMovie()...

Publié : ven. 05/août/2005 0:31
par Backup
ben non :D

le freemovie libere la ram

alors que le delete lui cherche a effacer un programme sur le disk dur !!

dailleurs si l'on ne met pas freemovie , ça marche pas plus !! :D