[v4 beta 11] DeleteDirectory() [corrigé]

Archive.
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

[v4 beta 11] DeleteDirectory() [corrigé]

Message par Jacobus »

Cet exemple d'utilisation me retourne 0 à chaque fois !?

Code : Tout sélectionner

Case #Menu_DeletedIR; menu popup
          Position_Popup      = GetGadgetState(#ExplorerListGadget)
          If Position_Popup  >= 0 
            ResultDir    = GetGadgetItemState(#ExplorerListGadget,Position_Popup)
            Repertoire$  = GetGadgetText(#ExplorerListGadget)+GetGadgetItemText(#ExplorerListGadget, Position_Popup, 0)
                    Debug Repertoire$
            If Repertoire$<>""
              If FileSize(Repertoire$)= -2
                 Resultat = DeleteDirectory(Repertoire$,"*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
                 If Resultat <>0
                    Debug "OK"
                 Else 
                    Debug "NO"
                    MessageRequester("ERREUR", "TU PEUX TOUJOURS TE BROSSER !!", #MB_ICONEXCLAMATION)
                 EndIf 
              EndIf 
            EndIf 
          EndIf 
Une idée ?
Dernière modification par Jacobus le jeu. 04/mai/2006 11:43, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

T'as essayé uniquement avec '*' comme filtre ?
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Oui, en prenant tous les types je pensais éliminer les problèmes.

J'ai fais un exemple (ci-dessous) qui fonctionne "presque" toujours. Mais je me demande si ce n'est pas lié à l'affichage. Si les fichiers ou dossiers sont affichés dans plusieurs explorateurs, le système considère peut-être qu'ils sont en cours d'utilisation et refuse alors de les supprimer. Le bean's, c'est que ça ne le fais pas à tous les coups.

Par contre, magré que j'utilise la même façon de procéder dans mon prog plus complexe, les répertoires refusent obstinément d'être supprimés. ?! Je ne trouve pas les interférences avec les autres fonctions...bref, je blaire un max :(

Voici le test sur 2 ExplorerListGadget()

Code : Tout sélectionner

Enumeration 
  #win
  #ExplorerFiles
  #PopUp
  #Menu_File
  #Menu_Delete
  #Menu_BackUp
  
  #ExplorerBackUp
  #PopUpBackUp
  #Menu_FileBackUp
  #Menu_DeleteBackUp
  EndEnumeration 
  
  If ExamineDirectory(0, "c:\BackUp_Test", "*.*") = 0
  BackUp_directory = CreateDirectory("c:\BackUp_Test") 
  EndIf 
  
  ExamineDesktops()
  Largeur$ = Str(DesktopWidth(0))
  Hauteur$ = Str(DesktopHeight(0))
  If Val(Largeur$)>800 And Val(Hauteur$)>600
    FlagWin = #PB_Window_SystemMenu  | #PB_Window_ScreenCentered |#PB_Window_TitleBar
  Else 
    FlagWin = #PB_Window_SystemMenu  |#PB_Window_TitleBar
  EndIf 
  
  ww = 790 : wh = 550
  Hwnd = OpenWindow(#win,0,0, ww, wh, "Window - Tests", FlagWin)
  If Hwnd = 0 Or CreateGadgetList(WindowID(#win))=0  
    End 
  EndIf
  If CreatePopupMenu(#PopUp)
    MenuItem(#Menu_File, "Fichier")
    MenuBar()
    MenuItem(#Menu_Delete,"Supprimer")
    MenuBar()
    MenuItem(#Menu_BackUp,"Faire une copie de sauvegarde")
  EndIf  
  If CreatePopupMenu(#PopUpBackUp)
    MenuItem(#Menu_FileBackUp, "Fichier")
    MenuBar()
    MenuItem(#Menu_DeleteBackUp,"Supprimer")
  EndIf 
  
  Dossier$="c:\"
  ExplorerListGadget(#ExplorerFiles,5,5, 780, 250, Dossier$,#PB_Explorer_AlwaysShowSelection)
  ChangeListIconGadgetDisplay(#ExplorerFiles, #PB_ListIcon_LargeIcon)
  
  ExplorerListGadget(#ExplorerBackUp,5,260, 780, 250, "c:\BackUp_Test\",#PB_Explorer_AlwaysShowSelection)
  ChangeListIconGadgetDisplay(#ExplorerBackUp, #PB_ListIcon_LargeIcon)
  
Repeat  
  Select WaitWindowEvent() 
    Case #PB_Event_Gadget  
      Select EventGadget()
      
      Case #ExplorerFiles 
          Select EventType()            
            Case #PB_EventType_RightClick
              PositionPopup      = GetGadgetState(#ExplorerFiles)
              If PositionPopup  >= 0 
                 Resultat        = GetGadgetItemState(#ExplorerFiles,PositionPopup)
                 SelectElement$  = GetGadgetText(#ExplorerFiles)+GetGadgetItemText(#ExplorerFiles, PositionPopup, 0)
                 SetMenuItemText(#PopUp,#Menu_File,"Fichier :  "+GetFilePart(SelectElement$))
                 DisplayPopupMenu(#PopUp,WindowID(#Win))
              EndIf  
           EndSelect   
           
       Case #ExplorerBackUp 
          Select EventType()            
            Case #PB_EventType_RightClick
              PositionPopup      = GetGadgetState(#ExplorerBackUp)
              If PositionPopup  >= 0 
                 Resultat        = GetGadgetItemState(#ExplorerBackUp,PositionPopup)
                 SelectBackUp$  = GetGadgetText(#ExplorerBackUp)+GetGadgetItemText(#ExplorerBackUp, PositionPopup, 0)
                 SetMenuItemText(#PopUpBackUp,#Menu_FileBackUp,"Fichier :  "+GetFilePart(SelectBackUp$))
                 DisplayPopupMenu(#PopUpBackUp,WindowID(#Win))
              EndIf  
           EndSelect      
                  
     EndSelect 
     
    Case #PB_Event_Menu 
      Select EventMenu()
      
      ;Case #Menu_File
      
      Case #Menu_Delete
       PositionPopup         = GetGadgetState(#ExplorerFiles)
          If PositionPopup  >= 0 
            FileState = GetGadgetItemState(#ExplorerFiles,PositionPopup)
            File$     = GetGadgetText(#ExplorerFiles)+GetGadgetItemText(#ExplorerFiles, PositionPopup, 0)
            If File$<>""
            
               If FileState & #PB_Explorer_Directory
                 Suppression = DeleteDirectory(File$,"*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
                 If Suppression <>0
                    MessageRequester("OK", "Répertoire supprimé", #MB_ICONINFORMATION)
                 Else 
                    MessageRequester("ERREUR", "Impossible de supprimer ce répertoire", #MB_ICONEXCLAMATION)
                 EndIf 
              EndIf 
              
              If FileState & #PB_Explorer_File
                 Suppression = DeleteFile(File$)
                 If Suppression <>0
                    MessageRequester("OK", "Fichier supprimé", #MB_ICONINFORMATION)
                 Else 
                    MessageRequester("ERREUR", "Impossible de supprimer ce fichier", #MB_ICONEXCLAMATION)
                 EndIf 
              EndIf 
              
            EndIf 
          EndIf 
          
      Case #Menu_BackUp
        PositionPopup         = GetGadgetState(#ExplorerFiles)
          If PositionPopup  > = 0 
            FileState = GetGadgetItemState(#ExplorerFiles,PositionPopup)          
            ToBackUp$ = GetGadgetText(#ExplorerFiles)+GetGadgetItemText(#ExplorerFiles, PositionPopup, 0)
            If FileState & #PB_Explorer_Directory
               BackUp = CopyDirectory(ToBackUp$, "c:\BackUp_Test\"+GetFilePart(ToBackUp$), "*.*" ,#PB_FileSystem_Recursive|#PB_FileSystem_Force)
               SetGadgetText(#ExplorerBackUp, "c:\BackUp_Test\")
            ElseIf FileState & #PB_Explorer_File
               BackUp = CopyFile(ToBackUp$, "c:\BackUp_Test\"+GetFilePart(ToBackUp$)) 
               SetGadgetText(#ExplorerBackUp, "c:\BackUp_Test\")
            EndIf 
           EndIf 
      
      
      Case #Menu_DeleteBackUp
       PositionPopup         = GetGadgetState(#ExplorerBackUp)
          If PositionPopup  >= 0 
            FileState = GetGadgetItemState(#ExplorerBackUp,PositionPopup)
            FileBackUp$     = GetGadgetText(#ExplorerBackUp)+GetGadgetItemText(#ExplorerBackUp, PositionPopup, 0)
            If FileBackUp$<>""
            
              If FileState & #PB_Explorer_Directory
                 Suppression = DeleteDirectory(FileBackUp$,"*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
                 If Suppression <>0
                    MessageRequester("OK", "Répertoire supprimé", #MB_ICONINFORMATION)
                    SetGadgetText(#ExplorerBackUp, "c:\BackUp_Test\")
                 Else 
                    MessageRequester("ERREUR", "Impossible de supprimer ce répertoire", #MB_ICONEXCLAMATION)
                 EndIf 
              EndIf 
              
              If FileState & #PB_Explorer_File
                 Suppression = DeleteFile(FileBackUp$)
                 If Suppression <>0
                    MessageRequester("OK", "Fichier supprimé", #MB_ICONINFORMATION)
                    SetGadgetText(#ExplorerBackUp, "c:\BackUp_Test\")
                 Else 
                    MessageRequester("ERREUR", "Impossible de supprimer ce fichier", #MB_ICONEXCLAMATION)
                 EndIf 
              EndIf 
              
            EndIf 
          EndIf 
       
       
      EndSelect 
      
    Case #PB_Event_CloseWindow :Quitter = 1
           
  EndSelect  
  
Until Quitter
End 
          
          
Alors que je n'ai pas rencontré de problème avec un bouton, les menus et popupmenus posent problème. Cela vient peut-être de la récupération du chemin du fichier/dossier dans les menus...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Bon, je sais maintenant pourquoi la suppression ne peut se faire.

C'est que le système trouve un programme autre qui utilise le fichier ou la ressource et, normalement, empêche sa suppression.

Le problème c'est que hormis l'application PB en cours qui affiche le dossier ou fichier, celui-ci n'est utilisé nulle part ailleurs. Il semble donc que le simple fait de sélectionner un dossier dans l'ExplorerListGadget(), le rend insupprimable car considéré en cours d'utilisation :!:
Et le plus affreux dans tout ça, c'est que ça n'arrive pas toujours... :(
Aurais tu une solution?

Le problème n'existe pas avec les "copies" (voir code d'exemple dans post précédent) qui sont facilement supprimées.

PS: j'ai remarqué que l'ExplorerListGadget() s'actualise automatiquement depuis PB4, sans qu'il soit nécessaire d'utiliser SetGadgetText(), pratique.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Tu as raison, c'est l'explorerlistgadget() qui empeche la suppression, a cause du monitoring qui est installé dessus (pour la réactualisation automatique justement). Je vais jetter un oeil dessus.
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:) Je vois que tu as fait pas mal de corrections, super.
J'en profite pour remonter ce sujet, le problème me fait cruellement défaut, merci.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Jacobus a écrit ::) Je vois que tu as fait pas mal de corrections, super.
J'en profite pour remonter ce sujet, le problème me fait cruellement défaut, merci.
j'avais deja parler de ce probleme sur Nono

la Dll ne pouvais pas effacer un fichier, car il semblait locké par le prg principale , j'ai resolu le problem en le contournant, et en creant a chaque fois un fichier *.Tmp avec un nom different ce qui permet d'effacer le fichier precedant , puisqu'il n'est plus le dernier utiliser par le prg principal ... :?

voir ici !! http://purebasic.forum-gratuit.com/viewtopic.php?t=2762
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Oui en effet je me souviens de ton post (encore plus en le relisant)

Il semble bel et bien que ce soit l'ExplorerListGadget() qui déconne. Pour afficher les dossiers il semble les utiliser et tu peux essayer ce que tu veux, il refuse de les supprimer.

Le plus étrange, dans l'exemple de code que j'ai donné, tu as le premier explorateur dans lequel DeleteDirectory() ne fonctionne pas, mais DeleteFile() lui marche très bien et dans le second explorateur, où les copies sont envoyées, là pas de problème, tout peut-être supprimé et avec la même procédure. :!: :?:

c'est fâcheux...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Fred, j'ai constaté que le problème ne survient pas avec Win 98 / Me / 9x où les dossiers et fichiers sont supprimés correctement, mais l'actualisation automatique de l'ExplorerListGadget() ne se fait pas, il faut utiliser SetGadgetText() pour ça.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

C'est corrigé.
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:D Merci !
Je vais pouvoir mettre à jour.
J'avoue que ça fait du bien une bonne nouvelle.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre