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 :

Incohérence en listant des fichiers avec le protocole Ftp


Sujet :

VB.NET

  1. #1
    Membre habitué
    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
    Points : 167
    Points
    167
    Par défaut Incohérence en listant des fichiers avec le protocole Ftp
    Bonjour à tous,

    Je crée ce post suite à l'ancien : http://www.developpez.net/forums/d14...tion-date-ftp/

    Pour résumer mon problème, je liste des fichiers/dossiers sur des serveurs via le protocole Ftp. Mon code fonctionne sur tous les serveurs sauf un qui me pose problème.

    Voici ce que me renvoient les Ftp qui fonctionnent : Nom : ftp2.png
Affichages : 188
Taille : 10,7 Ko

    Et celui qui ne fonctionne pas : Nom : ftp1.png
Affichages : 148
Taille : 10,2 Ko

    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
    Public Function ListDirectory(ByRef pPath As String, ByRef pFtpConnection As ICredentials) As String()
     
              Dim streamReader As StreamReader = Nothing
     
              Try
                   ' Création de la requête de récupération de la liste des fichiers
                   Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(pPath), FtpWebRequest)
                   maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
                   maRequeteListe.Credentials = pFtpConnection
     
                   ' 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
                   streamReader = New StreamReader(maResponseListe.GetResponseStream, streamReader.CurrentEncoding())
     
                   ' Lecture du stream reader
                   Dim listeBrute As String = streamReader.ReadToEnd
     
                   Dim separateur() As String = {vbLf}
     
                   Return listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
     
              Catch ex As Exception
                   Console.WriteLine(ex.Message)
                   Return Nothing
     
              Finally
                   If streamReader IsNot Nothing Then
                        streamReader.Close()
                   End If
     
              End Try
    End Function
    Je pense pas que cela provienne de l’encodage car je demande le CurrentEncoding() au StreamReader.

    Avez-vous une idée ?

    Si vous avez besoin de plus d'informations, n'hésitez pas

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Jah73 Voir le message
    Pour résumer mon problème, je liste des fichiers/dossiers sur des serveurs via le protocole Ftp. Mon code fonctionne sur tous les serveurs sauf un qui me pose problème.
    Malheureusement le format de listing FTP n'est pas du tout standardisé, du coup chaque serveur peut faire un peu ce qu'il veut... En tous cas ce format semble vraiment bizarre ; est-ce que ça s'affiche correctement avec un client FTP comme FileZilla ?

    Citation Envoyé par Jah73 Voir le message
    Je pense pas que cela provienne de l’encodage car je demande le CurrentEncoding() au StreamReader.
    Euh, tu es sûr que c'est ton vrai code ? Parce que là ça doit planter sur une NullReferenceException quand tu fais streamReader.CurrentEncoding(), vu qu'à ce stade streamReader vaut Nothing...
    De toutes façons, même si le StreamReader n'était pas Nothing, ce n'est pas pour autant qu'il aurait le bon encodage.

  3. #3
    Membre habitué
    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
    Points : 167
    Points
    167
    Par défaut
    Merci pour ta réponse tomlev

    Effectivement, je me suis trompé de code lors du copier/coller. Voici le bon morceau :

    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
    Public Function ListDirectory(ByRef pPath As String, ByRef pFtpConnection As ICredentials) As String()
     
        Dim streamReader As StreamReader = Nothing
     
        Try
            ' Création de la requête de récupération de la liste des fichiers
            Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(pPath), FtpWebRequest)
            maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
            maRequeteListe.Credentials = pFtpConnection
     
            ' Récupération de la liste de fichiers
            Dim maResponseListe As FtpWebResponse = CType(maRequeteListe.GetResponse, FtpWebResponse)
     
            Dim sr = New StreamReader(maResponseListe.GetResponseStream)
     
            Dim e1 As Encoding = sr.CurrentEncoding
     
            If sr IsNot Nothing Then sr.Close()
     
            ' Placement du flux provenant du serveur dans un streamreader
            streamReader = New StreamReader(maResponseListe.GetResponseStream, e1)
     
            ' Lecture du stream reader
            Dim listeBrute As String = streamReader.ReadToEnd
     
            Dim separateur() As String = {vbLf}
     
            Return listeBrute.Split(separateur, StringSplitOptions.RemoveEmptyEntries)
     
            Catch ex
            ....
            End Try
     
    End Function
    J'ai bien conscience que c'est "incohérent" de récupérer l'encodage d'un StreamReader pour en recréer un autre derrière avec le même encodage mais je teste toutes les possibilités..


    Citation Envoyé par tomlev Voir le message
    est-ce que ça s'affiche correctement avec un client FTP comme FileZilla ?
    Oui, aucun problème avec FileZilla

    Citation Envoyé par tomlev Voir le message
    De toutes façons, même si le StreamReader n'était pas Nothing, ce n'est pas pour autant qu'il aurait le bon encodage.
    Je pensais que ça fonctionnerai mais non... streamReader = New StreamReader(maResponseListe.GetResponseStream, e1) me lève une exception : Le flux ne peut pas être lu.

    Même si cela n'apporte pas grand chose e1 contient ceci :



    Je suis un peu à court d'idées. Y a-t-il une solution ou une alternative ?

    Merci !
    Images attachées Images attachées  

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Jah73 Voir le message
    J'ai bien conscience que c'est "incohérent" de récupérer l'encodage d'un StreamReader pour en recréer un autre derrière avec le même encodage mais je teste toutes les possibilités..
    Bah c'est surtout que ça n'a pas beaucoup de sens... puisque tu ne précises pas, le premier StreamReader est créé avec l'encodage UTF8, et donc le 2e aussi. Essaie de préciser un autre encodage (par exemple Encoding.Default pour ANSII)

  5. #5
    Membre habitué
    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
    Points : 167
    Points
    167
    Par défaut
    J'ai essayé tous les encodages qui me sont proposés (UTF32, UTF7, etc..) ainsi que le detectEncodingFromByteOrderMarks mais sans succès ..

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu as essayé ceux qui sont directement accessibles via une propriété de Encoding, mais il y en a plein d'autres. Regarde le résultat de Encoding.GetEncodings() pour voir la liste

  7. #7
    Membre habitué
    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
    Points : 167
    Points
    167
    Par défaut
    J'ai essayé de passer l'encodage en fonction des Pages de code associées aux Noms en me renseignant via le MSDN : http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx

    Mais comment savoir quel encodage tester ?

    Merci pour ton aide

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Jah73 Voir le message
    Mais comment savoir quel encodage tester ?
    Aucune idée...

    A l'origine le protocole FTP ne supportait que l'encodage ASCII 7 bits (US-ASCII), mais la RFC 2640 introduit la possibilité de passer en UTF-8. Si le serveur en question n'est pas trop antédiluvien, ça devrait être supporté. Regarde ici pour un exemple :

    http://social.msdn.microsoft.com/For...-ftp?forum=ncl

  9. #9
    Membre habitué
    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
    Points : 167
    Points
    167
    Par défaut
    Merci pour ta réponse tomlev

    Le serveur qui pose problème commence à dater, il est de 1995. Je vais regarder la solution que tu me proposes. Ca n'a pas l'air simple

Discussions similaires

  1. Envoyer un fichier avec le protocole FTP. SHELL
    Par Ghostaunt dans le forum Linux
    Réponses: 6
    Dernier message: 03/04/2011, 07h20
  2. Manipulation des fichiers avec fstream.
    Par Pragmateek dans le forum SL & STL
    Réponses: 4
    Dernier message: 04/04/2006, 13h12
  3. trier des fichiers avec un tableau flexgrid
    Par digger dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/12/2005, 15h20
  4. Transférer des fichiers avec un câble réseau
    Par denis finch dans le forum Développement
    Réponses: 5
    Dernier message: 08/11/2005, 16h08
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

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