Page 1 sur 1

[RESOLU] FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 9:55
par omega
Bonjour,

ça marchait si bien hier (après l'aide précieuse de falsam sur l'affichage des icônes devant
les noms de fichiers) mais hop: encore un bug !

Bon. La connexion ftp marche bien, les icônes sont affichés devant les noms de fichiers,
je sélectionne un fichier (un seul pour tester) à gauche pour le transférer vers le chemin
ftp, je clique sur le bouton TRANSFERER, le transfert se fait normalement sans problème
le statut m'affiche: transfert terminé, le fichier xxx a été transféré avec succès. Jusqu'ici
je me plains pas. Tout va bien.

Mais une fois le transfert terminé, la liste des fichiers distants se vide (c'est prévu dans le
code, ClearItemList avant d'afficher le nouveau contenu: normal) mais elle reste vide, rien
n'est affiché, pourtant le programme doit ré-afficher le contenu du chemin distant juste
après le transfert.

Ouf! voilà, c'est ça mon problème.... j'ai vu et revu le code d'affichage (c'est la même
procédure d'affichage elle s'exécute pourtant au début après connexion...?)


Merci encore de votre éclaircissement

Voici le code:

Code : Tout sélectionner

Enumeration
#Mainform
#SeparLigne1
#Source
#Destination
#Connection
#FrameFtpInfo
#FTP_Serveur_Txt
#FTP_Serveur
#exemple1
#FTP_User_Txt
#FTP_User
#exemple2
#FTP_Mp_Txt
#FTP_Mp
#FTP_RepLocal_Txt
#FTP_RepLocal
#FTP_RepDistant_Txt
#FTP_RepDistant
#exemple3
#exemple4
#CheckMemoriser
#FrameFtpCon
#Connexion

#FTP_Parcourir

#HOME_Explorer_Rep
#HOME_Explorer

#FTP_Explorer_Rep
#FTP_Explorer

#Transferer
#StatutList
#FrameObs
#Ftp

EndEnumeration

UseJPEGImageDecoder()
UsePNGImageDecoder()

trans=CatchImage(0, ?trans)
parcourir=CatchImage(1, ?parcourir)
connecter=CatchImage(2, ?connecter)

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

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Global ErrorFound,Result,LocalPath$,FtpPath$,WChemin$,wFileSelected$
Global NbreFT,NbreEchec,Item,FullPath_Local$,FullPath_Ftp$,FolderIcon
Global WFtp$,WuserFtp$,WMpFtp$

Procedure GetAssociatedFileIcon(IconPath.s, Value.l)
  Protected FileInfo.SHFILEINFO
  SHGetFileInfo_(IconPath, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_ICON | Value) 
  ProcedureReturn FileInfo\hIcon 
EndProcedure

FolderIcon = GetAssociatedFileIcon(GetHomeDirectory(), #SHGFI_SMALLICON)

Procedure OpenWindows()
ExamineDesktops()
Wlargeur=DesktopWidth(0)
Whauteur=DesktopHeight(0)
If OpenWindow(#Mainform, 0,0, Wlargeur, Whauteur, "FTP_test", WindowStyle)
   If CreateGadgetList(WindowID(#Mainform))
      WLar=(Wlargeur-100)/2:WHaut=(Whauteur/2) : wrow=260 : wcol=70+wlar 

      Frame3DGadget(#FrameFtpInfo,10,10,460,170,"Paramètres de connexion...")
      TextGadget(#FTP_Serveur_Txt, 20, 30, 100, 20,"Serveur FTP :")
      ComboBoxGadget(#FTP_Serveur, 120, 30, 200, 100,#PB_ComboBox_Editable)      
      TextGadget(#Exemple1, 330, 30, 110, 20,"(ex.: ftp.purebasic.com)")
      TextGadget(#FTP_User_Txt, 20, 55, 100, 20,"Nom utilisateur :")
      ComboBoxGadget(#FTP_User, 120, 55, 200, 100,#PB_ComboBox_Editable)      
      TextGadget(#Exemple2, 330, 55, 110, 20,"(ex.: fred)")
      TextGadget(#FTP_Mp_Txt, 20, 80, 100, 20,"Mot de passe :")
      StringGadget(#FTP_Mp, 120, 80, 200, 20,"",#PB_String_Password)      
      TextGadget(#FTP_RepLocal_Txt, 20, 105, 100, 20,"Répertoire local")
      ButtonImageGadget(#FTP_Parcourir, 96, 102, 25, 22, ImageID(1))
      StringGadget(#FTP_RepLocal, 122, 105, 198, 20,"")      
      TextGadget(#Exemple3, 330, 105, 110, 20,"(ex.: c:\mes fichiers\")
      TextGadget(#FTP_RepDistant_Txt, 20, 130, 100, 20,"Répertoire distant")
      StringGadget(#FTP_RepDistant, 120, 130, 200, 20,"")      
      TextGadget(#Exemple4, 330, 130, 110, 20,"(ex.: /public_html")
      CheckBoxGadget(#CheckMemoriser,120,150,250,20,"Mémoriser les paramètres de connexion")     

      ButtonImageGadget(#Connection, 9+wlar, 55, 61, 45, ImageID(2))
      ButtonImageGadget(#Transferer, 15+wlar, wrow+90, 49, 30, ImageID(0))

      Frame3DGadget(#FrameFtpCon,wcol,10,460,170,"Statut...")
      ListViewGadget(#StatutList, wcol+10, 30, 440,135)

      Frame3DGadget(#SeparLigne1,10,wrow-70,wlargeur-42,6,"",#PB_Frame3D_Single)

      TextGadget(#HOME_Explorer_Rep, 10, wrow-15, wlar, 20,"", #PB_Text_Border)
      ExplorerListGadget(#HOME_Explorer, 10, wrow+10, Wlar, whaut, "", #PB_Explorer_MultiSelect)

      TextGadget(#FTP_Explorer_Rep, wcol, wrow-15, wlar, 20,"", #PB_Text_Border)
      ListIconGadget(#Ftp_Explorer, wcol, wrow+10, wlar, whaut,Space(20)+"Nom",160,#PB_ListIcon_GridLines )
      AddGadgetColumn(#Ftp_Explorer,1, "Taille", 50)
      AddGadgetColumn(#Ftp_Explorer,2, "   Type", 80)
      AddGadgetColumn(#Ftp_Explorer,3, "Date modification", 100)

   EndIf 
EndIf
EndProcedure

Procedure SetGadgetColors()
SetGadgetColor(#StatutList,#PB_Gadget_BackColor,RGB(98, 98, 98))
SetGadgetColor(#StatutList,#PB_Gadget_FrontColor,RGB(230, 230, 230))
SetGadgetColor(#exemple1,  #PB_Gadget_FrontColor,RGB(140, 140, 140))
SetGadgetColor(#exemple2,  #PB_Gadget_FrontColor,RGB(140, 140, 140))
SetGadgetColor(#exemple3,  #PB_Gadget_FrontColor,RGB(140, 140, 140))
SetGadgetColor(#exemple4,  #PB_Gadget_FrontColor,RGB(140, 140, 140))
;-----------ToolTip()
GadgetToolTip(#Transferer, "Démarrer le transfert...") 
GadgetToolTip(#FTP_Parcourir, "Parcourir...") 
GadgetToolTip(#Connection, "Se connecter...") 
EndProcedure

Procedure SetDefaulValues()
;WFtp$="127.0.0.1"
;WuserFtp$="user"
;WMpFtp$="user"
;LocalPath$="D:\"
;FtpPath$="\data\"
;------------------
WFtp$="ftp.purebasic.com"
WuserFtp$="fred"
WMpFtp$="forum"
LocalPath$="c:\"
FtpPath$="/public_html/"

SetGadgetText(#FTP_Serveur,WFtp$)
SetGadgetText(#FTP_User,WuserFtp$)
SetGadgetText(#FTP_Mp,WMpFtp$)
SetGadgetText(#FTP_RepLocal,LocalPath$)
SetGadgetText(#FTP_RepDistant,FtpPath$)

SetGadgetText(#HOME_Explorer_Rep,LocalPath$)
SetGadgetText(#FTP_Explorer_Rep,FtpPath$)

;-------------------
;DisableGadget(#Transferer,1)
;-------------------
wDate$ = FormatDate("%dd/%mm/%yyyy", Date())
;-------------------
EndProcedure

Procedure GetFtpInfos()
WFtp$=GetGadgetText(#FTP_Serveur)
WuserFtp$=GetGadgetText(#FTP_User)
WMpFtp$=GetGadgetText(#FTP_Mp)
LocalPath$=GetGadgetText(#FTP_RepLocal)
FtpPath$=GetGadgetText(#FTP_RepDistant)

SetGadgetText(#HOME_Explorer_Rep,LocalPath$)
SetGadgetText(#FTP_Explorer_Rep,FtpPath$)
EndProcedure

Procedure Afficher_Fichiers_Ftp()
ClearGadgetItemList(#FTP_Explorer)
If SetFTPDirectory(#Ftp, FtpPath$)
   If ExamineFTPDirectory(#Ftp)
      While NextFTPDirectoryEntry(#Ftp)
             Wtype=FTPDirectoryEntryType(#Ftp)
             Wdate=FTPDirectoryEntryDate(#Ftp)
             wDate$ = FormatDate("%dd/%mm/%yyyy", wDate)
             If wtype =#PB_FTP_File
                Fichier$ =  FTPDirectoryEntryName(#Ftp)
                Icon = GetAssociatedFileIcon(Fichier$, #SHGFI_SMALLICON | #SHGFI_USEFILEATTRIBUTES)
                AddGadgetItem(#FTP_Explorer,-1,Fichier$+Chr(10)+""+Chr(10)+"fichier"+Chr(10)+wdate$, Icon)
             EndIf
             If wtype =#PB_FTP_Directory
                AddGadgetItem(#FTP_Explorer,-1,FTPDirectoryEntryName(#Ftp)+Chr(10)+""+Chr(10)+"dossier"+Chr(10)+wdate$, FolderIcon)  
             EndIf
      Wend
   EndIf
EndIf
EndProcedure

Procedure Demarrer_Transfert_FTP()
For item=0 To CountGadgetItems(#HOME_Explorer)
    If GetGadgetItemState(#HOME_Explorer, item) & #PB_Explorer_Selected
       wFileSelected$=GetGadgetItemText(#HOME_Explorer, item)   
       FullPath_Local$=LocalPath$+wFileSelected$
       FullPath_Ftp$=FtpPath$+wFileSelected$
       If SendFTPFile(#Ftp, FullPath_Local$,FullPath_ftp$,1)
          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   
Next item    
EndProcedure

OpenWindows()
SetGadgetColors()
SetDefaulValues()
GetFtpInfos()

InitNetwork()

Repeat 
EventID = WaitWindowEvent()

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

   Case #Connection
         ClearGadgetItemList(#FTP_Explorer)
         GetFtpInfos()

         If wFtp$=""
            MessageRequester("Erreur","Adresse FTP incorrecte  ! ")
            Goto Fin_Connection
         EndIf
         If wUserFtp$=""
            MessageRequester("Erreur","Nom utilisateur incorrect  ! ")
            Goto Fin_Connection
         EndIf
         If wMpFtp$=""
            MessageRequester("Erreur","Mot de passe incorrect  ! ")
            Goto Fin_Connection
         EndIf
         If LocalPath$=""
            MessageRequester("Erreur","Saisissez le répertoire initial local ! ")
            Goto Fin_Connection
         EndIf
         If FtpPath$=""
            MessageRequester("Erreur","Indiquez le répertoire initial distant ! ")
            Goto Fin_Connection
         EndIf
         
         ;Tentative de connection au serveur ftp...
         ;Cette adresse ftp marche : 127.0.0.1         
          
         If OpenFTP(#ftp, wFtp$, WuserFtp$, wMpFtp$)
            MessageRequester("Etat de la connection", "Serveur ftp connecté avec succès")
         Else
            MessageRequester("Connection error", "Impossible de se connecter au serveur !")
            Goto Fin_Connection
         EndIf
         
         SetGadgetText(#FTP_Explorer_Rep,FtpPath$)

         Afficher_Fichiers_Ftp()
         
   Fin_Connection :
              
   Case #HOME_Explorer
        If EventType()=#PB_EventType_Change
           wchemin$=GetGadgetText(#HOME_Explorer)
           SetGadgetText(#HOME_Explorer_Rep,wchemin$)
           LocalPath$=wchemin$
        EndIf
    
   Case #FTP_Explorer
        If EventType()=#PB_EventType_Change
           wchemin$=GetGadgetText(#FTP_Explorer)
           SetGadgetText(#FTP_Explorer_Rep,wchemin$)
           FtpPath$=wchemin$
        EndIf

   Case #FTP_Parcourir
         WChemin$=PathRequester("Sélectionnez un dossier:", LocalPath$)
         If wchemin$
            SetGadgetText(#HOME_Explorer_Rep,wChemin$)
            SetGadgetText(#FTP_RepLocal,wChemin$)
            ResizeGadget(#HOME_Explorer, #PB_Ignore, #PB_Ignore,#PB_Ignore, #PB_Ignore)
            LocalPath$=wchemin$
         EndIf    

   Case #Transferer
         ErrorFound=0
         NbreFt=0
         NbreEchec=0
         ClearGadgetItemList(#StatutList)
         FtpPath$=GetGadgetText(#FTP_RepDistant)
         
         ;------------ Transfert de fichiers (chemin local vers chemin ftp ----------------
         Demarrer_Transfert_FTP()

         ;Résultat du transfert...
         If NbreEchec=0 And NbreFt=0
            MessageRequester("Erreur","Aucun fichier n'a été sélectionné pour le tansfert !")
         Else   
            ;Affichage des fichiers transférés dans la liste de destination (ftp) = réaffichage du chemin ftp 
            Afficher_Fichiers_Ftp()
            
            ;Affichage du statut...
            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

Re: FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 10:24
par falsam
Modifies la ligne 186 (je n'ai pas testé)

Code : Tout sélectionner

If SendFTPFile(#Ftp, FullPath_Local$,FullPath_ftp$,1)<>0
    While FTPProgress(#Ftp)<>#PB_FTP_Finished
      Debug FTPProgress(#Ftp)
    Wend 

Re: FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 10:36
par omega
Merci beaucoup Falsam

ça marche maintenant mais j'avoue que je ne comprends pas pourquoi ce petit code
a réglé ce problème (??)

Merci encore, l'essentiel ça marche

Re: FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 10:49
par falsam
omega a écrit :j'avoue que je ne comprends pas pourquoi ce petit code a réglé ce problème (??)
Parce que un seul fichier peut être reçu ou envoyé à la fois. FTPProgress() permet de suivre la progression de SendFTPFile() et donc de savoir si le transfert est terminé (#PB_FTP_Finished) ou si il y a eu une erreur (#PB_FTP_Error).

Re: [RESOLU] FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 13:35
par omega
OUi, effectivement...
Merci Falsam..

Autre chose falsam: pour les icônes à afficher devant les noms de fichiers
ça marche pour tous les fichiers sauf pour les fichiers-icones (*.ico)

Pourquoi cette procédure n'inclut pas ce type de fichiers ?

Code : Tout sélectionner

Procedure GetAssociatedFileIcon(IconPath.s, Value.l)
  Protected FileInfo.SHFILEINFO
  SHGetFileInfo_(IconPath, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_ICON | Value) 
  ProcedureReturn FileInfo\hIcon 
EndProcedure
Merci encore Falsam..

Re: [RESOLU] FTP_test : Encore un problème !

Publié : lun. 18/mars/2013 17:05
par falsam
omega a écrit :Autre chose falsam: pour les icônes à afficher devant les noms de fichiers
ça marche pour tous les fichiers sauf pour les fichiers-icones (*.ico)
Réponse sur ce post http://www.purebasic.fr/french/viewtopi ... =1&t=13562