[RESOLU]Récupérer le chemin des fichiers dans explorergadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU]Récupérer le chemin des fichiers dans explorergadget

Message par omega »

Salut à toute l'équipe

Code : Tout sélectionner

Enumeration
#Mainform
#FrameCon
#AdFtpTxt
#AdFtp
#exemple1
#UserFtpTxt
#UserFtp
#exemple2
#MpFtpTxt
#MpFtp
#RepLocalTxt
#RepLocal
#exemple3
#RepDistantTxt
#RepDistant
#exemple4
#SelectLocalPath
#LocalPath
#localExplorer
#SelectNetworkPath
#NetworkPath
#NetworkExplorer
#Transferer
#StatutList
EndEnumeration

UseJPEGImageDecoder()

trans=CatchImage(0, ?trans)
open1=CatchImage(1, ?open)
open2=CatchImage(2, ?open)

DataSection
trans:
IncludeBinary "images\trans.jpg"
open:
IncludeBinary "images\open.jpg"
EndDataSection

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Global ErrorFound,Result,LocalPath$,NetworkPath$,WChemin$,wFileSelected$
Global NbreFT,NbreEchec,Item

ExamineDesktops()
Wlargeur=DesktopWidth(0)
Whauteur=DesktopHeight(0)
If OpenWindow(#Mainform, 0,0, Wlargeur, Whauteur, "Ftp_PRO", WindowStyle)
   If CreateGadgetList(WindowID(#Mainform))
      WLar=(Wlargeur-100)/2:WHaut=(Whauteur/2) : wrow=200 : wcol=70+wlar 
      Frame3DGadget(#FrameCon,10,10,460,160,"Connexion...")
      TextGadget(#AdFtpTxt, 20, 30, 100, 20,"Serveur FTP :")
      ComboBoxGadget(#AdFtp, 120, 30, 200, 100,#PB_ComboBox_Editable)      
      TextGadget(#Exemple1, 330, 30, 140, 20,"(exemple: ftp.purebasic.fr)")
      TextGadget(#UserFtpTxt, 20, 55, 100, 20,"Nom utilisateur :")
      ComboBoxGadget(#UserFtp, 120, 55, 200, 100,#PB_ComboBox_Editable)      
      TextGadget(#Exemple2, 330, 55, 140, 20,"(exemple: fred)")
      TextGadget(#MpFtpTxt, 20, 80, 100, 20,"Mot de passe :")
      StringGadget(#MpFtp, 120, 80, 200, 20,"",#PB_String_Password)      
      TextGadget(#RepLocalTxt, 20, 105, 100, 20,"Répertoire local")
      StringGadget(#RepLocal, 120, 105, 200, 20,"")      
      TextGadget(#Exemple3, 330, 105, 140, 20,"(exemple: c:\mes fichiers\")
      TextGadget(#RepDistantTxt, 20, 130, 100, 20,"Répertoire distant")
      StringGadget(#RepDistant, 120, 130, 200, 20,"")      
      TextGadget(#Exemple4, 330, 130, 140, 20,"(exemple: \public_html\")
           
      ButtonImageGadget(#SelectLocalPath,10, wrow-25, 30, 20,ImageID(1))
      TextGadget(#LocalPath, 40, wrow-25, wlar-30, 20,"", #PB_Text_Border)
      ExplorerListGadget(#LocalExplorer, 10, wrow, Wlar, whaut, "", #PB_Explorer_MultiSelect)
      ButtonImageGadget(#Transferer, 20+wlar, wrow, 35, 30, ImageID(0))
      ButtonImageGadget(#SelectNetworkPath, wcol, wrow-25, 30, 20,ImageID(2))
      TextGadget(#NetworkPath, wcol+30, wrow-25, wlar-30, 20,"", #PB_Text_Border)
      ExplorerListGadget(#NetworkExplorer, wcol, wrow, wlar, whaut,"")
      wrow=wrow+whaut+10
      ListViewGadget(#StatutList, 10, wrow, 60+(wlar*2),100)
   EndIf 
EndIf

SetGadgetColor(#LocalPath,  #PB_Gadget_BackColor,RGB(250, 250, 250))
SetGadgetColor(#NetworkPath,  #PB_Gadget_BackColor,RGB(250, 250, 250))
SetGadgetColor(#StatutList,  #PB_Gadget_BackColor,RGB(98, 98, 98))
SetGadgetColor(#StatutList,  #PB_Gadget_FrontColor,RGB(230, 230, 230))

GadgetToolTip(#SelectLocalPath, "Parcourir...") 
GadgetToolTip(#SelectNetworkPath, "Parcourir...") 
GadgetToolTip(#Transferer, "Transférer...") 

LocalPath$="c:\"
NetworkPath$="c:\testftp\"

Repeat 
EventID = WaitWindowEvent()

If EventID = #PB_Event_CloseWindow
   End
EndIf
             
If EventID = #PB_Event_Gadget
   Select EventGadget()

   Case #SelectNetworkPath 
         WChemin$=PathRequester("Sélectionnez un dossier:", NetworkPath$)
         If wchemin$
            SetGadgetText(#NetworkPath,wChemin$)
            SetGadgetText(#NetworkExplorer,wChemin$)
            ResizeGadget(#NetworkExplorer, #PB_Ignore, #PB_Ignore,#PB_Ignore, #PB_Ignore)
         EndIf    
   
   Case #SelectLocalPath 
         WChemin$=PathRequester("Sélectionnez un dossier:", LocalPath$)
         If wchemin$
            SetGadgetText(#LocalPath,wChemin$)
            SetGadgetText(#LocalExplorer,wChemin$)
            ResizeGadget(#LocalExplorer, #PB_Ignore, #PB_Ignore,#PB_Ignore, #PB_Ignore)
         EndIf    

   Case #Transferer
         ErrorFound=0
         NbreFt=0
         NbreEchec=0
         ClearGadgetItemList(#StatutList)
         
         NetworkPath$=GetGadgetText(#NetworkPath)
         
         If ExamineDirectory(0,  NetworkPath$, "*.*")  
            If NextDirectoryEntry(0) And DirectoryEntryName(0)<>"." And DirectoryEntryName(0)<>".." 
               FinishDirectory(0)
            EndIf
         Else
            Result = MessageRequester("Erreur", "Le dossier de destination n'existe pas. Voulez-vous le créer? ", #PB_MessageRequester_YesNo)
            If Result =6
               If CreateDirectory(NetworkPath$) 
                  MessageRequester("Nouveau dossier","Le dossier " + NetworkPath$+ " a été créé avec succès!")
               Else
                  MessageRequester("Erreur","Le dossier " + NetworkPath$+ " n'a pas pu être créé!")
                  ErrorFound=1
               EndIf
            Else
               ErrorFound=1
            EndIf                          
         EndIf
                           

         If ErrorFound=1 : Goto Fin_Transfert : EndIf
         
         ;------------ Transfert de fichiers 
         For item=0 To CountGadgetItems(#LocalExplorer)
             If GetGadgetItemState(#LocalExplorer, item) & #PB_Explorer_Selected
                wFileSelected$=GetGadgetItemText(#LocalExplorer, item)   
                 
                If GetGadgetItemState(#LocalExplorer, item) & #PB_Explorer_Directory
                   If CopyDirectory(wFileSelected$, NetworkPath$ + wFileSelected$, "",#PB_FileSystem_Recursive | #PB_FileSystem_Force)
                      AddGadgetItem (#StatutList,-1,Space(10) + wFileSelected$ + " a été transféré avec succès")
                      NbreFt=NbreFt+1
                   Else
                      AddGadgetItem (#StatutList,-1,Space(10)+wFileSelected$ + " n'a pas pu être transféré")
                      NbreEchec=NbreEchec+1
                   EndIf
                EndIf    
                If GetGadgetItemState(#LocalExplorer, item) & #PB_Explorer_File
                   If CopyFile(wFileSelected$, NetworkPath$ + wFileSelected$)
                      AddGadgetItem (#StatutList,-1,Space(10)+wFileSelected$ + " a été transféré avec succès")
                      NbreFt=NbreFt+1
                   Else
                      AddGadgetItem (#StatutList,-1,Space(10)+wFileSelected$ + " n'a pas pu être transféré")
                      NbreEchec=NbreEchec+1
                   EndIf
                EndIf    
             EndIf   
         Next item    
         If NbreEchec=0 And NbreFt=0
            MessageRequester("Erreur","Aucun fichier n'a été sélectionné pour le tansfert !")
         Else   
            AddGadgetItem (#StatutList,-1,"___________________________________________________________")
            AddGadgetItem (#StatutList,-1,Space(10)+" Transfert terminé !")
            AddGadgetItem (#StatutList,-1,Space(10)+" Nbre de fichiers transférés : " + Str(NbreFt))
            AddGadgetItem (#StatutList,-1,Space(10)+" Nbre de fichiers non transférés : " + Str(NbreEchec))
         EndIf
                     
   Fin_Transfert :
        
   EndSelect
EndIf    
ForEver
En réalité, la partie FTP sera développée plus tard, pour l'instant, il s'agit simplement d'un transfert de fichier d'un chemin vers un autre chemin (juste pour test)

Désolé pour les images mais il faut les prévoir pour tester ce code.

Bon, pour l'instant, ça marche comme je veux, mais je bloque ici:

Quand je sélectionne (ou j'ouvre un dossier) dans l'explorergadget, le chemin du contenu des fichiers listés dans le gadget doit changer. Comment faire pour récupérer ce chemin et le mettre dans la zône texte prévue à cet effet au dessus de l'explorer.

Je ne sais pas si je suis clair mais parfois j'ai du mal à m'exprimer...

Je vais essayer de simplifier ma question:
Comment connaître le chemin complet d'un fichier sélectionné dans un ExporerListGadget ?
Mon but est de faire apparaître ce chemin dans la zone texte au dessus de l' ExporerListGadget

Merci
Dernière modification par omega le mar. 12/mars/2013 12:22, modifié 2 fois.
Win7 (x64) 64 bits Pb 5.72
Azur
Messages : 40
Inscription : ven. 22/mai/2009 23:58

Re: Récupérer dossier parent dans explorergadget

Message par Azur »

Salut
De mémoire:
Tu détecte une événement #pb_eventtype_change du gadget signalant que le répertoire a changé
Tu peux récupèrer le chemin avec getGadgetText()
Ensuite tu as des fonctions comme
GetPathPart qui te renvoie uniquement le dossier
et
GetFilePart qui te renvoie uniquement le nom du fichier ( utile pour le nom du fichier dest vers ftp )

Code : Tout sélectionner

EnableExplicit

Define win=OpenWindow(#PB_Any,0,0,320,600,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
Global expl=ExplorerTreeGadget(#PB_Any,0,0,320,600,"")

Procedure sortie()
  End
EndProcedure
;_________ recuperer donnees explorer, extraire chemin et nom fichier
Procedure recupChemin()
  Define chemin.s=GetGadgetText(expl)
  Define repertoire.s=GetPathPart(chemin)
  Define fichier.s=GetFilePart(chemin)
  Debug "chemin complet : "+chemin
  Debug "repertoire uniquement : "+repertoire
  Debug "nom fichier uniquement : "+fichier
EndProcedure
;____________ evenement gadget
Procedure gadget()
  Select EventGadget()
    Case expl
      Select EventType()
        Case #PB_EventType_Change
          recupChemin()
      EndSelect
  EndSelect
EndProcedure
;_____________ scan evenements
Procedure scan()
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      sortie()
    Case #PB_Event_Gadget
      gadget()
  EndSelect
EndProcedure
;_______________ main loop
Procedure mainLoop()
  Repeat
    scan()
  ForEver
EndProcedure

mainLoop()
Voila, je relis ton post et ton code et j'ai un doute à propos de ta question ... bref. Je pense que getPathPart() est peut être ce que tu cherches.

Ah oui et encore un truc
Ce n'est pas impossible qu’il y ait une confusion à propos du terme "dossier parent".
Le dossier parent d'un emplacement donné c'est le dossier qui se trouve un étage au dessus

c:\parent\dossier_actuel

Un dernier truc:
Tu devrais éviter de poster des messages contenant des trucs du style:

Code : Tout sélectionner

If ErrorFound=1 : Goto Fin_Transfert : EndIf
Sur un forum public. C'est un coup à finir en prison par les temps qui courent ...
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Récupérer dossier parent dans explorergadget

Message par omega »

Salut Azur
Un dernier truc:
Tu devrais éviter de poster des messages contenant des trucs du style:
If ErrorFound=1 : Goto Fin_Transfert : EndIf
Sur un forum public. C'est un coup à finir en prison par les temps qui courent ...
Mais, pourquoi l'éviter? C'est nécessaire de sauter le code à ne pas exécuter ?? NON?

C'est vrai, tu as raison, tous les fichiers listés doivent avoir un même chemin, je me demande
pourquoi je n'y avais pas pensé c'est tellement évident...Il suffit de récupérer le chemin d'un seul fichier de la liste.. C'est bête de ma part mais.. que veux-tu ... c'est comme ça qu'on apprend..

Merci pour ton aide Azur
Win7 (x64) 64 bits Pb 5.72
Azur
Messages : 40
Inscription : ven. 22/mai/2009 23:58

Re: Récupérer dossier parent dans explorergadget

Message par Azur »

Normalement une instruction qui a le comportement de goto, on ne trouve plus ça qu'en assembleur, mais en Pure... je ne me souviens pas l'avoir utilisée une seule fois.

là tu fais:

if (erreur) goto label; endif
fais des trucs
label:

la première modification qui vient à l'esprit c'est:

if not (erreur)
fais des trucs
endif

et le top ce serait un truc du style

if procedureCheckErreur()=0
procedureFaisDesTrucs()
endif

Dans ce cas, dans ton code ça prend vraiment 3 lignes, et ça saute aux yeux que le goto n'est pas utile.

Pour peu que ton prog évolue plus tard tu peux recoller ta procedureCheckErreur à chaque fois.

Voila, maintenant que tu débutes ou non, que tu programme pour ton plaisir ou pour ArianeEspace ( premier lancement Ariane 5 je présume ... ), que tu sois nul ou génial, je n'en pense rien. Tu peux très bien être un jeune de 10ans qui débute la prog ou un jeune de 70ans qui a toujours fait comme ça. C'est cool chacun sa façon de faire, si on écoutait les avis de tout le monde on ferait jamais rien.
Quoi qu'il en soit je trouve que toute la partie de réflexion sur la façon dont on peut organiser son code, et créer de nouvelles méthodes pour faire circuler les données et gérer les flux d'événements par exemple, c'est passionnant.

Bon par contre pour les goto attention quand même, y a pas mal de fanatiques un peu tarés.
Entre ceux qui se réunissent au nom du père du fils et du C++, et ceux qui égorgent du code au cris de Java Ouakbar, si ils te localisent en remontant ton ip, y viennent chez toi et y tuent le chat. C'est moche ...
Alors bon courage ... et méfiance ( rire satanique ici ).
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Récupérer dossier parent dans explorergadget

Message par omega »

Azur !!! Tu me fais peur !! brrrrr...

Tu sais je ne suis pas fort en devinette... Il se pourrait que tu insinues quelque chose d'utile pour moi, mais, de mon côté, les prisons et... tuer le chat.. etc.. j'ai l'angoisse...

Tu sais Azur, finalement, ta solution n'a pas marché ! Et oui, regarde cette syntaxe:

Code : Tout sélectionner

GetPathPart(FullPathName$)   
Il faut connaître le chemin complet, exemple:

Code : Tout sélectionner

path$=GetPathPart("c:\purebasic\forum.exe")   
debug path$
; ça donne forcément

"c:\purebasic\"
Voila, on n'est pas sorti de l'auberge Azur (à moins que je trompe encore une fois..)

Humm...
Win7 (x64) 64 bits Pb 5.72
Azur
Messages : 40
Inscription : ven. 22/mai/2009 23:58

Re: Récupérer le chemin des fichiers listés dans explorergad

Message par Azur »

J'ai ajouté ça vers la ligne 117

Code : Tout sélectionner

   Case #NetworkExplorer
    If EventType()=#PB_EventType_Change
      Define chem.s=GetGadgetText(#NetworkExplorer)
      SetGadgetText(#NetworkPath,chem.s)
      Debug chem.s
    EndIf


Sur le network ça modifie bien le texte au dessus là ?
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Récupérer le chemin des fichiers listés dans explorergad

Message par omega »

Merci beaucoup Azur

Tu es super ! ça marche !
Win7 (x64) 64 bits Pb 5.72
Répondre