mornaloce
Messages postés47Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 2014
-
5 juil. 2012 à 14:48
mornaloce
Messages postés47Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 2014
-
6 juil. 2012 à 16:49
Bonjour à tous,
Je suis actuellement entrain de créer une application en VB.Net. Cette application doit me permettre de mettre à jour des dossier de mon ftp, en gros je synchronise mon ftp avec mes dossiers en local. Pour tout ce qui est accès ftp et récupération de données ftp j'utilise ce code : http://www.vbfrance.com/codes/TRANSFERT-FICHIER-FTP-AVEC-VB-NET_5664.aspx
Pour les fichiers en local j'utilise FSO. Mon processus de mise à jour fonctionne mais du fait que j'ai plus de 2000 fichiers il prend environs 15min pour tout mettre à jour. J'aimerais donc optimiser mes parcours de dossiers c'est pour cela que j'ai besoin de votre aide. Voici mon code de parcours d'un tableau à l'heure actuelle :
On créé les liste de fichiers pour documents et photos grâce aux FSO
Dim objFSO_Pictures = CreateObject("Scripting.FileSystemObject")
Dim objDossier_Pictures = objFSO_Pictures.GetFolder(repertoire_pictures)
Client.GetList() 'On charge la liste des photos du ftp
Dim liste() As FileItem = Client.GetDirectoryListing() 'On récupère cette liste dans une variable
'Envoie des photos sur le ftp
For Each photo In objDossier_Pictures.Files 'Pour chaque photo en local
Dim photosFtp As FileItem = New FileItem
'On parcourt la liste des photos du ftp pour savoir si la photo courant en local existe déjà
For i As Integer = 0 To liste.Count() - 1
If liste(i).FileTitle = photo.Name Then 'Si la photo existe
photosFtp = liste(i) 'On récupère ses infos (nom, taille, date de modif, ...)
Exit For 'On sort de la boucle for
End If
Next
pathFtpFile = "/prod/files/photos/" + photo.Name
'Si le fichier n'existe pas encore sur le ftp ou si la date de modification du fichier local est plus récente que celle du ftp on remplace le fichier du ftp
If photosFtp.FileTitle "" Or DateTime.Compare(File.GetLastWriteTime(photo.Path), photosFtp.FileDate) > 0 Then 'DateTimeCompare : si t1 date antérieur à t2 < 0, si t1 t2 0, si t1 postérieur à t2 > 0
If Not Client.UploadFile(photo.Path, pathFtpFile) Then 'Si l'upload du fichier sur le ftp s'est mal passé
MsgBox("Une erreur est survenu lors de la copie de la photos " + photo.Name, MsgBoxStyle.Critical, "Attention !") 'On affiche une fenêtre d'erreur
Exit Sub 'On arrête tout le processus
End If
End If
Next
N'y aurait-il pas un moyen de faire quelque chose du genre de "find()" sur mon tableau ?
FSO est notoirement lent, et c'est inutile de l'utiliser en VB.net, d'autant plus que c'est un activex qui s'utilise en code non managé. Le Framework .net contient toutes les classes dont tu as besoin.