Séparateur pour nom de fichier
Bonjour à tous,
j'ai un petit problème avec la fonction split de VB.net dans une procédure dans laquelle je répertorie tous les répertoires et fichiers sur un serveur FTP.
voici les lignes qui m'ennuie :
Code:
1 2 3
|
Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
Dim tableauListe() As String = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries) |
et voici la procédure complète :
Code:
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 |
le problème est que lorsque j'ai un nom de fichier ou de répertoire avec un espace, il me split le nom et ne conserve que la deuxième partie. Par exemple pour le répertoire "Dessins Animés" il ne me garde que "Animés".
Avez-vous une idée de ce que je pourrais faire pour palier à ce problème ?
Merci beaucoup