IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Séparateur pour nom de fichier


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Soit tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim separateur As String = Environment.NewLine ' -> retour chariot
    Dim tableauListe() As String = listeBrute.Split(CChar(separateur), StringSplitOptions.RemoveEmptyEntries)

    Soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
    Dim tableauListe() As String = listeBrute.Split(CChar(separateur(0)), StringSplitOptions.RemoveEmptyEntries)

    Déclarer une variable avec () derrière son nom indique un tableau. (Ici separateur()) Si tu veux un tableau, tu dois lui indiquer quelle ligne du tableau tu veux utiliser pour ton Split. (2éme exemple j'indique l'index 0 -> 1ére ligne du tableau)

  3. #3
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Bonjour Ez3kiel et merci de ta réponse.

    Peux-tu m'expliquer brièvement en quoi le fait de remplacer la variable "separateur" par un tableau va changer quelque chose ?

    Merci d'avance

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je n'ai pas remplacé la variable par un tableau, c'est toi qui l'a déclaré comme un tableau de string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim toto as String '  -> Variable de type string contenant une chaîne
    Dim toto() as String '  -> Variable de type String contenant un tableau de chaînes
    J'ai vu que tu déclarais un tableau, donc je t'ai proposé 2 solutions, la première étant de remplacer ton tableau de string par une classique variable string.

    La 2éme étant de garder ton fonctionnement avec ton tableau, mais pour utiliser un élément de ce tableau il faut lui indiquer son index (separateur(0)
    Ou sinon tu peux juste faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim tableauListe() As String = listeBrute.Split(CChar(Environment.NewLine), StringSplitOptions.RemoveEmptyEntries)

  5. #5
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Je n'ai pas remplacé la variable par un tableau, c'est toi qui l'a déclaré comme un tableau de string.
    Effectivement.

    Par contre :

    Dim tableauListe() As String = listeBrute.Split(CChar(Environment.NewLine), StringSplitOptions.RemoveEmptyEntries)
    Quel va être l'effet du CChar(.....) ?

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Split prend un type Char en paramètre, et tu lui donnes un type String.

    Dans les paramètres de ton projet, à l'onglet 'Compiler', tu as une combo qui propose "Option Strict : On/Off", l'option Off (celle par défaut que tu dois utiliser) autorise les conversions implicites (et liaison tardives mais c'est autre chose), c'est à dire que c'est le compilateur (je crois) qui va convertir ta String en Char, c'est pratique pour gagner du temps, mais c'est pas "propre".
    Essaye de le passer en Option Strict : On, et il te signalera tes erreurs de typage ou de liaison tardives, et tu n'auras qu'à les corriger.

    Plus d'infos : Option Strict - MSDN

    Et donc pour répondre à ta question initiale Cchar est une des fonctions de conversions, il va convertir ta String en Char. (Dans le même genre tu as CDate, CDec(imal), CBool(ean), etc etc), si tu es en Strict Off, pas besoin de CChar le compilateur fera le boulot à ta place.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Load data avec une variable pour nom de fichier
    Par kelk1 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 14/01/2016, 14h41
  2. [XL-2010] Enregistrement PDF avec pour nom de fichier le contenu d'une cellule.
    Par Julzz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2012, 11h46
  3. String pour nom de fichiers en UTF-8
    Par ammine007 dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2011, 10h22
  4. Réponses: 2
    Dernier message: 26/06/2008, 09h50
  5. [Excel] séparateur pour les fichiers csv
    Par drinkmilk dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2005, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo