1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
Public Function _Get_ListFiles(ByVal Ajouter_un_Log As Delegate_Ajouter_un_Log, Optional ByVal _p_DossierDistantScanner As TypeUpload = TypeUpload.recup, Optional ByVal p_Local_Directory_FullName As String = "") As List(Of cls_Fichier)
Dim monResponseStream As Stream = Nothing
Dim monStreamReader As StreamReader = Nothing
Dim listeFinale As New List(Of cls_Fichier)
' Instanciation de deux Uri qui vont contenir les chemins source et destination
Dim DossierDistant = ""
Select Case _p_DossierDistantScanner
Case Is = TypeUpload.Archive
DossierDistant = Me.Distant.Archive.FullName
Case Is = TypeUpload.Depot
DossierDistant = Me.Distant.Dépot.FullName
Case Is = TypeUpload.recup
DossierDistant = Me.Distant.Récup.FullName
End Select
Dim monUriServeur As New System.Uri(DossierDistant)
' Vérification de la validité de l'Uri du fichier sur le serveur FTP
If Not (monUriServeur.Scheme = Uri.UriSchemeFtp) Then
Ajouter_un_Log("cls_FTP::_GetFiles", "l'adresse FTP n'est pas valide donc la récupération de la liste des fichiers présent sur le serveur n'a pas pu se réaliser.", "", "Avertissement")
GoTo fin
End If
Try
' Création de la requête de récupération de la liste des fichiers
Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(monUriServeur), FtpWebRequest)
maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
' Vérification de la présence des identifiants d'un compte, si aucun alors
' la connexion se fait en mode anonyme
If Not _Utilisateur.Length = 0 Then
Dim monCompteFtp As New NetworkCredential(_Utilisateur, _Pwd)
maRequeteListe.Credentials = monCompteFtp
End If
' Récupération de la liste de fichiers
Dim maResponseListe As FtpWebResponse = CType(maRequeteListe.GetResponse, FtpWebResponse)
' Placement du flux provenant du serveur dans un streamreader
monStreamReader = New StreamReader(maResponseListe.GetResponseStream, Encoding.Default)
' Lecture du stream reader
Dim listeBrute As String = monStreamReader.ReadToEnd
' Découpage de chaque fichier dans la liste concaténée de fichiers
Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
' Découpage et récupération des noms de fichiers
Dim tableauListe() As String = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
' Lecture du tableau et tri des noms de fichiers
Dim i As Integer = 0
While i < tableauListe.Length
' Les répertoires se différencient des fichiers par le fait que
' la chaîne que l'on récupère commence par un "d".
If Not tableauListe(i).StartsWith("d") Then
' On place les noms de fichiers dans une liste
Dim nom = tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1)
listeFinale.Add(New cls_Fichier(p_Local_Directory_FullName, nom, DossierDistant, nom))
End If
i += 1
End While
Catch ex As Exception
Ajouter_un_Log("cls_FTP::_GetFiles", "Erreur lors de la récupération de la liste des fichiers présent sur le serveur.", ex.Message, "Erreur")
Finally
' Fermeture des différents flux utilisés
If monResponseStream IsNot Nothing Then
monResponseStream.Close()
End If
If monStreamReader IsNot Nothing Then
monStreamReader.Close()
End If
End Try
fin:
Return listeFinale
End Function |
Partager