Probleme de ftp ...
Publié : ven. 05/nov./2004 14:49
Voila, je vous explique : Je suis entrin de faire un programme qui se connecte a un ftp, qui se dirige dans un rep et qui affiche le contenue du repertoire! J'ai reussi a faire tout ca en m'aidant des aides sur le net!
Voila le code que jutilise
Maintenant j'en viens a mes problèmes 
- J'aimerais que la connexion se fasse en arrière plan pour que le programme reste accessible durant la connexion!
- J'aimerais avoir la taille des fichiers, car la j'arrive a afficher les fichiers mais j'arrive pas a avoir leur taille
- J'aimerais aussi que quand on telecharge les fichiers, il s'affiche en dessous (dans l'endroit prevu a cet effet :p) Et que la barre de progression augmente en fonction du telechargement.
Voila en gros, se sont cela mes problèmes, si un d'entre vous sait repondre , ca serais bien gentil :p
@++Laz`76
Voila le code que jutilise

Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_4
#MENU_7
#MENU_5
#MENU_11
#MENU_12
#MENU_14
#MENU_15
#MENU_16
#MENU_18
#MENU_19
EndEnumeration
;- Gadget Constants
;
Enumeration
#Gadget_1
#Gadget_2
#Gadget_3
#Gadget_4
#Gadget_5
#Gadget_6
#Gadget_7
#Gadget_8
#Gadget_9
EndEnumeration
Procedure GetFTPinfo()
InternetGetLastResponseInfo_(@lpdwError.l, 0, @lpdwBufferLength.l)
If lpdwBufferLength > 0
lpszBuffer$ = Space(lpdwBufferLength)
If InternetGetLastResponseInfo_(@lpdwError, @lpszBuffer$, @lpdwBufferLength)
CRLF$ = Chr(13) + Chr(10)
posA.l = FindString(lpszBuffer$, CRLF$, 0)
If posA
AddGadgetItem(#Gadget_7, 0, (Left(lpszBuffer$, posA - 1)))
StatusBarText(0, 1, (Left(lpszBuffer$, posA - 1)), #PB_StatusBar_BorderLess)
UpdateStatusBar(0)
posA + 2
posB.l = FindString(lpszBuffer$, CRLF$, posA)
While posB
AddGadgetItem(#Gadget_7, 0,(Mid(lpszBuffer$, posA, posB - posA)))
StatusBarText(0, 1, (Mid(lpszBuffer$, posA, posB - posA)), #PB_StatusBar_BorderLess)
UpdateStatusBar(0)
posA = posB + 2
posB = FindString(lpszBuffer$, CRLF$, posA)
Wend
Else
AddGadgetItem(#Gadget_7, -1,(lpszBuffer$))
StatusBarText(0, 1, (lpszBuffer$), #PB_StatusBar_BorderLess)
UpdateStatusBar(0)
EndIf
EndIf
;AddGadgetItem(#Gadget_7, -1, "")
EndIf
EndProcedure
Procedure.l FTPInit()
ProcedureReturn InternetOpen_("FTP",1,"","",0)
EndProcedure
Procedure.l FTPConnect(hInternet,Server.s,User.s,Password.s,Port.l)
ProcedureReturn InternetConnect_(hInternet,Server,Port,User,Password,1,0,0)
EndProcedure
Procedure.l FTPDir(hConnect.l)
hFind=FtpFindFirstFile_(hConnect,"*.*",@FTPFile.WIN32_FIND_DATA,0,0)
If hFind
Find=1
AddGadgetItem(#Gadget_2, -1,PeekS(@FTPFile\cFileName))
While Find
Find=InternetFindNextFile_(hFind,@FTPFile)
If Find
AddGadgetItem(#Gadget_2, -1,PeekS(@FTPFile\cFileName))
EndIf
Wend
EndIf
EndProcedure
Procedure.l FTPSetDir(hConnect.l,Dir.s)
ProcedureReturn FtpSetCurrentDirectory_(hConnect,Dir)
EndProcedure
Procedure.l FTPCreateDir(hConnect.l,Dir.s)
ProcedureReturn FTPCreateDirectory_(hConnect,Dir)
EndProcedure
Procedure.l FTPDownload(hConnect.l,Source.s,Dest.s)
ProcedureReturn FTPGetFile_(hConnect,Source,Dest,0,0,0,0)
EndProcedure
Procedure.l FTPClose(hInternet.l)
ProcedureReturn InternetCloseHandle_(hInternet)
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 266, 276, 600, 440, #PB_Window_SystemMenu | #PB_Window_TitleBar , "Divx4Ever Pro-Jekt")
If CreateMenu(#MenuBar_0, WindowID())
MenuTitle("Fichiers")
MenuItem(#MENU_4, "Ouvrir"+Chr(9)+"Ctrl+O")
MenuBar()
MenuItem(#MENU_7, "Options"+Chr(9)+"Ctrl+P")
MenuBar()
MenuItem(#MENU_5, "Quitter"+Chr(9)+"Esc")
MenuTitle("Connexion")
MenuItem(#MENU_11, "Connexion au ftp"+Chr(9)+"Ctrl+Enter")
MenuBar()
MenuItem(#MENU_12, "Deconnexion du ftp"+Chr(9)+"Ctrl+F4")
MenuTitle("Téléchargement")
MenuItem(#MENU_14, "Séléctionner tout"+Chr(9)+"Ctrl+A")
MenuItem(#MENU_15, "Désélectionner tout"+Chr(9)+"Ctrl+D")
MenuBar()
MenuItem(#MENU_16, "Télécharger !")
MenuTitle("Aide")
MenuItem(#MENU_18, "Aide"+Chr(9)+"F1")
MenuBar()
MenuItem(#MENU_19, "A Propos"+Chr(9)+"Ctrl+F1")
EndIf
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Escape, #Menu_5)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_a, #Menu_14)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_d, #Menu_15)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_p, #Menu_7)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_o, #Menu_4)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_F1, #Menu_19)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_Return, #Menu_11)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_F4, #Menu_12)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_F1, #Menu_18)
If CreateGadgetList(WindowID())
Frame3DGadget(#Gadget_1, 10, 0, 580, 240, "Fichier(s) disponible(s) sur le serveur.")
ListIconGadget(#Gadget_2, 20, 20, 560, 210,"",0, #PB_ListIcon_CheckBoxes|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Gadget_2, 0, "Nom des fichiers", 300)
AddGadgetColumn(#Gadget_2, 1, "Etat", 235)
Frame3DGadget(#Gadget_3, 10, 250, 580, 60, "Fichier en téléchargement ")
ProgressBarGadget(#Gadget_4, 20, 290, 500, 10, 0, 10)
StringGadget(#Gadget_8, 530, 285, 40, 17, "",#PB_String_BorderLess|#PB_Text_Right)
TextGadget(#Gadget_9, 573, 285, 10, 20, "%")
StringGadget(#Gadget_5, 20, 267, 560, 17, "", #PB_String_BorderLess | #PB_String_ReadOnly)
Frame3DGadget(#Gadget_6, 10, 315, 580, 85, "Connexion au ftp !")
EditorGadget(#Gadget_7, 20, 330, 560, 60, "")
EndIf
If CreateStatusBar(0, WindowID())
AddStatusBarField(45)
AddStatusBarField(205)
AddStatusBarField(150)
AddStatusBarField(200)
EndIf
StatusBarText(0, 0, "Status :", #PB_StatusBar_BorderLess)
StatusBarText(0, 1, "* Etat de la connexion *", #PB_StatusBar_BorderLess)
StatusBarText(0, 2, "Téléchargement : ", #PB_StatusBar_BorderLess)
StatusBarText(0, 3, "Created by Laz`76 for Divx4Ever", #PB_StatusBar_Right | #PB_StatusBar_BorderLess)
UpdateStatusBar(0)
Repeat
Select WaitWindowEvent()
Case #PB_EventMenu
Select EventMenuID() ; To see which menu has been selected
Case 11 ; About
MessageRequester("About", "Cool Menu example", 0)
Case #Menu_11
url$ = "IP"
user$ = "USER"
pass$ = "PASS"
port = 21
dir$ ="Repertoire"
hInternet=FTPInit()
If hInternet
hInternet1.l = InternetOpen_("", 1, 0, 0, 0)
hConnect1.l = InternetConnect_(hInternet, @url$, port, @user$, @pass$, 1, 0, 0)
GetFTPinfo()
hConnect=FTPConnect(hInternet,url$,user$,pass$,port)
If hConnect
FTPSetDir(hConnect,dir$)
FTPDir(hConnect)
;FTPDownload(hConnect,"hello.txt","C:\download.txt")
Else
MessageRequester("Erreur","Désolé, le serveur est inaccessible"+Chr(10)+"Veuillez réessayer plus tard",0)
EndIf
Else
MessageRequester("Erreur","Désolé, le serveur est inaccessible"+Chr(10)+"Veuillez réessayer plus tard",0)
EndIf
Case #Menu_12
ClearGadgetItemList(#Gadget_2)
Case #Menu_16
If GetGadgetState(#Gadget_2) = -1
MessageRequester("Erreur","Vous devez selectionner un élément!",0)
Else
result = GetGadgetItemState(#Gadget_2, GetGadgetState(#Gadget_2))
If result = 1 Or result = 0
MessageRequester("info","L'element n'est pas coché",0)
ElseIf result = 3 Or result = 2
MessageRequester("info","L'element est coché",0)
Else
MessageRequester("info",Str(result),0)
EndIf
EndIf
Case #Menu_7
AddGadgetItem(#Gadget_2, 0, "toto")
SetGadgetItemText(#Gadget_2, 0, "Encore un test", 1)
Case #Menu_4
SetGadgetText(#Gadget_5, "Test")
Case #Menu_14
nbelem = CountGadgetItems(#Gadget_2)
For a = 0 To nbelem
SetGadgetItemState(#Gadget_2,a,#PB_ListIcon_Checked)
Next
Case #Menu_15
nbelem = CountGadgetItems(#Gadget_2)
For a = 0 To nbelem
SetGadgetItemState(#Gadget_2,a,0)
Next
Case #Menu_19
nbelem = CountGadgetItems(#Gadget_2)
For a = 0 To nbelem-1
result = GetGadgetItemState(#Gadget_2, a)
If result = 3 Or result = 2
SetGadgetText(#Gadget_5, GetGadgetItemText(#Gadget_2, a,0))
AddGadgetItem(#Gadget_7,-1, "150 Opening BINARY mode data connection for "+GetGadgetItemText(#Gadget_2, a,0))
;FTPDownload(hConnect,dir$+GetGadgetItemText(#Gadget_2, a,0),GetGadgetItemText(#Gadget_2, a,0))
EndIf
Next
Case #Menu_5
Quit=1
Default
MessageRequester("Info", "MenuItem: "+Str(EventMenuID()), 0)
EndSelect
Case #WM_CLOSE ; #PB_EventCloseWindow
FTPClose(hInternet)
Quit = 1
EndSelect
Until Quit = 1
EndIf
EndProcedure
Open_Window_0()

- J'aimerais que la connexion se fasse en arrière plan pour que le programme reste accessible durant la connexion!
- J'aimerais avoir la taille des fichiers, car la j'arrive a afficher les fichiers mais j'arrive pas a avoir leur taille

- J'aimerais aussi que quand on telecharge les fichiers, il s'affiche en dessous (dans l'endroit prevu a cet effet :p) Et que la barre de progression augmente en fonction du telechargement.
Voila en gros, se sont cela mes problèmes, si un d'entre vous sait repondre , ca serais bien gentil :p
@++Laz`76