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 :

Lister les dossiers d'un FTP [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut Lister les dossiers d'un FTP
    Bonjour à tous,

    Je souhaite que mon programme se connecte en FTP et liste les dossiers d'un chemin passé en paramètre. Pour ce faire, j'ai utilisé la librairie System.Net.FtpClient, diposinible ici : https://netftp.codeplex.com/.

    Le problème, c'est que le chemin où se trouve le dossier à lister comporte des ".".

    Ce sera plus clair avec du code :

    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
    Using ftp = New FtpClient()
         ftp.Host = "1.1.1.1.1"
         ftp.Credentials = New NetworkCredential("admin", "password")
         ftp.Connect()
         ftp.SetWorkingDirectory("/folder1/folder2")
     
         For Each item In ftp.GetListing(ftp.GetWorkingDirectory())
              Select Case item.Type
                   Case FtpFileSystemObjectType.Directory
                        'Traitement
                   Case FtpFileSystemObjectType.File
                         'Traitement
               End Select
         Next
         ftp.Dispose()
    End Using
    Cet exemple ci-dessus fonctionne mais mon chemin contient des ".",

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftp.SetWorkingDirectory("/folder1/folder2/folder.3/folder4")
    Dans ce cas, je n'arrive plus à lister les dossiers

    Quelqu'un serait pourquoi ca bloque et sinon une alternative ?

    Merci !

  2. #2
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Est-ce que quelqu'un pourrait me montrer un autre moyen de connexion à un FTP ?

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il y a aussi le system.net.ftpwebrequest, qui permet dans la propriété method de mettre system.net.ftpwebrequests.ListDirectory
    mais je pense que ca revient au même que le ftpclient (ou l'inverse ^^)

    tu peux tenter à tout hasard
    sinon il faudra passer par du tcp/ip, il y a des classes trouvables sur le net pour du ftp

    la classe ftp du framework n'est pas compatible avec tous les serveurs ftp ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Bonjour Pol63,

    Excuse-moi de ma réponse tardive

    J'essaye avec la bibliothèque System.Net.FtpWebRequest mais je n'arrive pas à lister les fichiers, je n'ai pas accès à la méthode system.net.ftpwebrequests.ListDirectory

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    cette valeur d'enum se met dans la propriété method
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Effectivement Pol63

    J'ai un petit problème que j'aimerais résoudre avant de poster mon code entier;

    Je n'arrive pas à découper la chaine de caractère que me renvoie la requête, voici le code :

    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
    Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(monUriServeur), FtpWebRequest)
     
    maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectory
     
    ' 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)
     
    ' Lecture du stream reader
    Dim listeBrute As String = monStreamReader.ReadToEnd
     
    For Each test In listeBrute.Split(Environment.NewLine)
         MsgBox(test)
    Next

    Je voudrais découper la liste avec listeBrute.Split(Environment.NewLine sauf que ca ne fonctionne pas. Je devrais avoir 2 combobox consécutives mais j'en ai qu'une avec 2 lignes

    Nom : msgbox.png
Affichages : 485
Taille : 8,1 Ko

    Je ne vois pas la cause

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    regarde les caractères exacts avec un point d'arret c'est peut etre juste un char(13)

    sinon il y a listdirectory et listdirectorydetail

    et c'est jamais simple à spliter de manière universelle car je crois que chaque serveur ftp formate comme il veut ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Merci pour ta réponse

    Malheureusement, ca ne fonctionne pas. J'ai aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each test In listeBrute.Split(vbCr)
         MsgBox(test)
    Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each test In listeBrute.Split(vbCrLf)
         MsgBox(test)
    Next
    Rien à faire

    EDIT : Comment vérifier les caractères avec les points d’arrêts ?
    EDIT2 : Via l'espion, voici la chaine de caractère : "1I0LA" & vbLf & "1I0LA-FULL_TTL" & vbLf & ""
    EDIT3 : Et voila, ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each test In listeBrute.Split(vbLf)
         MsgBox(test)
    Next
    Je finis mon code et je le poste

  9. #9
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Voici ma fonction qui me permet de lister de manière récursive les fichiers d'un serveur ftp :

    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
        Public Sub listeFichiers(ByVal serveurCible As String)
            Dim identifiant As String = ""
            Dim motDePasse As String = ""
            Dim monResponseStream As Stream = Nothing
            Dim monStreamReader As StreamReader = Nothing
     
            ' 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
                Exit Sub
            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)
     
                ' Lecture du stream reader
                Dim listeBrute As String = monStreamReader.ReadToEnd
     
                Dim separateur() As String = {vbLf}
     
                ' Découpage et récupération des noms de fichiers
                Dim tableauListe() As String = listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
     
                ' On débute à 1 car la première ligne contient le Total
                Dim i As Integer = 1
     
                ' Lecture du tableau et tri des fichiers
                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".
                    ' Si c'est un dossier
                    If tableauListe(i).StartsWith("d") And tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1) <> ".." And tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1) <> "." Then
                        listeFichiers(serveurCible & tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
     
                    ElseIf tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1) <> ".." And tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1) <> "." Then
                        MsgBox(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
                        'Traitement fichier
                    End If
                    i += 1
                End While
     
                ' 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
        End Sub
    Si quelqu'un voit comment améliorer mon code, je suis preneur

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

Discussions similaires

  1. Lister les dossiers d'un FTP
    Par cryosore dans le forum ANT
    Réponses: 2
    Dernier message: 10/03/2010, 11h46
  2. [FTP] Lister les dossiers d'un FTP distant
    Par Vico2110 dans le forum Langage
    Réponses: 10
    Dernier message: 18/07/2008, 11h42
  3. lister les dossiers d'un FTP ?
    Par yanker_man dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/07/2007, 14h37
  4. Lister les dossiers et fichiers d'un répertoire
    Par scorpia dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 18h50
  5. lister les dossiers contenu sur un CD
    Par titicurio dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/02/2006, 11h35

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