[RESOLU] FTP_test : Encore un problème !

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] FTP_test : Encore un problème !

Message 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
Dernière modification par omega le lun. 18/mars/2013 10:37, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FTP_test : Encore un problème !

Message 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 
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%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: FTP_test : Encore un problème !

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

Re: FTP_test : Encore un problème !

Message 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).
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%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

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

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

Message 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
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%
Répondre