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 83 84 85 86 87 88 89 90 91 92
| Public Function listeFichiers(ByVal serveurCible As String, ByVal identifiant As String, ByVal motDePasse As String) As Array
Dim monResponseStream As Stream = Nothing
Dim monStreamReader As StreamReader = Nothing
Dim monResultat As Array = Nothing
Dim Item As ListViewItem
ListView1.Items.Clear()
' Instanciation de deux Uri qui vont contenir les chemins source et destination
Dim monUriServeur As New System.Uri(serveurCible)
' Vérification de la validité de l'Uri du fichier sur le serveur FTP
If Not (monUriServeur.Scheme = URI.UriSchemeFtp) Then
MessageBox.Show("L'Uri du serveur FTP n'est pas valide", "Une erreur est surevnue", MessageBoxButtons.OK, MessageBoxIcon.Warning)
'Si Uri non valide, arrêt du listage
Return monResultat
Exit Function
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 identifiant.Length = 0 Then
Dim monCompteFtp As New NetworkCredential(identifiant, motDePasse)
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)
monStreamReader = New StreamReader(maResponseListe.GetResponseStream, True)
' Lecture du stream reader
Dim listeBrute As String = monStreamReader.ReadToEnd
'MsgBox(listeBrute)
' Découpage de chaque fichier dans la liste concaténée de fichiers
Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
'Dim separateur() As String = {vbCrLf} ' -> retour chariot
' Découpage et récupération des noms de fichiers
Dim tableauListe() As String = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
Dim listeFinale As New List(Of String)
' 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
listeFinale.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
Item = ListView1.Items.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
ListView1.Items(ListView1.Items.IndexOf(Item)).ImageKey = "fichier.png"
Else
listeFinale.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
Item = ListView1.Items.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
ListView1.Items(ListView1.Items.IndexOf(Item)).ImageKey = "dossier.png"
End If
i += 1
End While
monResultat = listeFinale.ToArray
' Gestion des exceptions
Catch ex As UriFormatException
MessageBox.Show(ex.Message)
Catch ex As WebException
MessageBox.Show(ex.Message)
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
Return monResultat
End Function |
Partager