Pourcourir un array

mornaloce Messages postés 47 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 21 mars 2014 - 5 juil. 2012 à 14:48
mornaloce Messages postés 47 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 21 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 ?

2 réponses

Utilisateur anonyme
5 juil. 2012 à 17:53
Bonjour,


Pour les fichiers en local j'utilise FSO.


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.

Ouvre ton aide et regarde les classes

DirectoryInfo
FileInfo
Directory
File

Même qu'avec VB.net, tu peux utiliser :

My.computer.fileSystem

Et puis, si tu as peur de mourrir en ouvrant ton aide tu peux aller voir sur Microsoft Systems Developper Network.
0
mornaloce Messages postés 47 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 21 mars 2014 2
6 juil. 2012 à 16:49
Merci beaucoup cmarcotte ! J'ai un gain de temps de 13min avec ta façon de faire, ce qui est quand même énorme ! Encore merci pour l'aide !

Cordialement,

Mornaloce
0
Rejoignez-nous