Pourquoi mon programme de téléchargement fonctionne mal ? [VB6] - Programmation
Marsh Posté le 07-06-2001 à 18:59:30
Je te conseille mon composant K-ftp que j'ai codé tout seul est qui est dispo gratos sur mon site.
Je suis ouvert à tout commentaire.
Marsh Posté le 07-06-2001 à 21:41:41
ok, je vais voir a quoi ca ressemble.
Sinon, ce programme est pour l'entreprise ou je fais mon stage( entr d'info en +), j'espere que c'est pas du tout pret
Marsh Posté le 08-06-2001 à 19:19:05
Dans le pire des cas, je te mettre les sources à disposition sur mon site (c'est du vb6 + winsock "tout con" )
Marsh Posté le 11-06-2001 à 08:41:24
C'est sympa merci, mais je dois utiliser des outils maison.
Marsh Posté le 11-06-2001 à 09:43:47
Tiens les pros de la programmation "pour FTP"
J'ai une question moi:
est ce qu'on peut outrepasser l'utilisation de répertoire COM1, COM2, etc... ?
Comment connaitre les répertoires qui sont derrière ?
Marsh Posté le 12-06-2001 à 08:31:18
En fait, j'ai touvé un début de solution, les fichiers sont copié sur le DD dans le tépertoire temp...internet files dans diférents répertoires, il faut les supprimers entre chaque changement de serveur.
Merci quand meme Kyle.
Marsh Posté le 07-06-2001 à 16:13:21
Mon programme doit lire dans une base de données access les différents parametres de connections a des comptes/serveurs FTP dans le but de télécharger tous les fichiers présents dans les comptes.
->MAis dans les différents comptes, quelques fichiers ont un nom identique mais de taille différentes.
Le probleme est que tous les fichiers de nom identiques sont remplacé sur le Disque dur (destination donnée par lecture de la base)par le premier du nom.
exemple : compte 1
fichier téléchargé :
azerty.log (1000KO)
aqw.aze(50KO)
compte 2
fichier téléchargé :
azerty.log (1000KO) (en réalité 1500KO, c'est donc meme que le premier)
vfr.aze(40KO)
...
De plus le second azerty.log met quelques secondes a etre téléchargé alors qu'il devrait mettre plus de temps (connection numéris), probleme de cache ????
voici le code :
' Déclaration des constantes
Private Const SESSION As String = "Ftp Session"
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_INVALID_PORT_NUMBER = 0
Private Const ERROR_NO_MORE_FILES = 18
'définition des variables globales
Private mlINetHandle As Long
Private mlConnection As Long
Dim pData As WIN32_FIND_DATA
Dim inetHandle As Long
Private Sub btquit_Click()
End
End Sub
Private Sub btstart_Click()
Dim dbimport As ADODB.Connection
Dim rstserveur As ADODB.Recordset
Dim nbenr As Integer
Dim ser, comp, pass, nom As String
'ouverture catalogue
Set dbimport = New ADODB.Connection
With dbimport
.Provider = "Microsoft.jet.OLEDB.4.0"
.Mode = adModeShareDenyNone
.Open "c:\fred\ftp\PR.mdb "
End With
' Déclaration et ouverture du Recordset sur la table
Set rstserveur = New ADODB.Recordset
With rstserveur
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open "Serveur", dbimport, , , adCmdTable
End With
nbenr = rstserveur.RecordCount
For i = 0 To 2
'nbenr -1 (pour éviter de tout télécharger)
' Initialisation
mlINetHandle = 0
mlConnection = 0
nom = rstserveur("nom" )
Text1.Text = nom
' MsgBox ""
' Récupération des paramètres de connexion
ser = rstserveur.Fields("serveur" )
comp = rstserveur.Fields("compte" )
pass = rstserveur.Fields("password" )
'depart procédé de connection
'Connexion internet
mlINetHandle = FTP.InternetOpen(SESSION, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'ouverture connexion au site
mlConnection = FTP.InternetConnect(mlINetHandle, ser, INTERNET_INVALID_PORT_NUMBER, _
comp, pass, INTERNET_SERVICE_FTP, 0, 0)
If (mlConnection = 0) Then
MsgBox "erreur de connexion, vérifiez les paramètres ou attendez quelques instants", vbInformation, "Connexion"
End If
' Déplacement au répertoire désiré
cheminFTP = rstserveur.Fields("Rep_distant" )
retour = FTP.FtpSetCurrentDirectory(mlConnection, cheminFTP)
If (retour = False) Then MsgBox "erreur de changement de dossier", vbInformation, "FTP error"
Text2.Text = "connection en cours; veuillez patienter..."
'efface la liste
List1.Clear
'rempli la liste
inetHandle = FTP.FtpFindFirstFile(mlConnection, "*.*", pData, 0, 0)
If (inetHandle <> 0) Then
If List1.List(0) = "" Then
Do
currentFile = Left$(pData.cFileName, InStr(1, pData.cFileName, vbNullChar, vbBinaryCompare) - 1)
List1.AddItem currentFile
fctreturn = FTP.FTPFindNextFile(inetHandle, pData)
Loop While fctreturn
End If
End If
Dim m4, dirname As String
Dim z4, i4 As Integer
Dim retour4 As Boolean
z4 = List1.ListCount
dirname = Dir(rstserveur.Fields("Rep_Local" ) + rstserveur.Fields("nom" ) + "\", 16)
If dirname = "" Then
MkDir rstserveur.Fields("Rep_Local" ) + rstserveur.Fields("nom" ) + "\"
Else
Set fso = CreateObject("Scripting.FileSystemObject" )
fso.DeleteFile rstserveur.Fields("Rep_Local" ) + rstserveur.Fields("nom" ) + "\" + "*.*"
End If
'crée un répertoire selon le nom du serveur
'télécharge les fichiers du serveur dans le répertoire crée
m4 = ""
For i4 = 0 To (z4 - 1)
m4 = ""
m4 = List1.List(i4)
' MsgBox mlConnection
' MsgBox rstserveur.Fields("Rep_Local" ) & rstserveur.Fields("nom" ) & "\" & m4
retour4 = FTP.FtpGetFile(mlConnection, m4, rstserveur.Fields("Rep_Local" ) + rstserveur.Fields("nom" ) + "\" + m4, True, FILE_ATTRIBUTE_NORMAL, INTERNET_FLAG_RELOAD + INTERNET_FLAG_TRANSFER_BINARY, 0)
If retour = True Then
Text2.Text = m4 + " copié"
End If
Next i4
Text2.Text = "Fichiers téléchargés !"
Text1.Text = ""
rstserveur.MoveNext
' fermeture de la connexion au site FTP
FTP.InternetCloseHandle mlConnection
' fermeture de la connexion internet
FTP.InternetCloseHandle mlINetHandle
Next i
End Sub