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

C# Discussion :

téléchargement par WebClient


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Par défaut téléchargement par WebClient
    Bonjour,
    Petit problème; j'utilise afin de télécharger en local une liste de fichiers WebClient.

    WebClient wc = new WebClient();
    ....
    wc.downloadFile(src,dest);
    ...

    Ensuite, pour traiter leurs contenus, TextReader.
    ...
    TextReader tr = new StreamReader(path, System.Text.Encoding.ASCII,false);
    // parcours du fichier
    while (tr.Peek() >0){
    ...
    }

    le problème est que lors de l'importation des fichiers [bêtes fichiers txt], il ne détécte pas que c'est de l'ASCII. Donc, mon TextReader ne detecte pas non plus la fin de la ligne.
    Une idée du problème ? lorsque j'ouvre l'un de ces fichier avec le notepad, ils ne contiennent en effet aucun retour à la ligne alors que sur le server distant oui.

    Merci pour votre aide

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Par défaut
    Je patauge.
    Personne ne sait transférer de bêtes fichiers en forçant le type à ASCII ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Par défaut
    En faisant un tr.ReadToEnd() ou lors en passant par autre chose qu'un TextReader tu n'arrives à rien?

    Je t'avoue n'avoir jamais eu ce problèmes lors de téléchargement FTP via FtpWebRequest.

    Si ça peut aider, je faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FtpWebRequest reqFTP;
     
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + m_ip + m_path));
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(m_userName, m_password);
    reqFTP.Method = command;
    StreamReader reader = new StreamReader (reqFTP.GetRequestStream().Read;)
    string txt = reader.ReadToEnd();
    reader.Close();
    reader.Dispose();

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 134
    Par défaut
    pourquoi ne pas utiliser un weqrequest et télécharger ton fichier avec un binary reader

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Par défaut
    Salut à tous et merci pour vos réponses. Mais J'AI TROUVE [d'ailleurs j'aurais pu trouver un peu plus tôt si j'avais été un peu plus malin et si j'avais un peu mieux lu ce que l'on trouve dans la msdn].

    J'ai définitivement laissé tombé l'utilisation de webClient. FtpWebRequest permet très simplement de spécifier le type de transfert que l'on efféctue grâce à
    ftp = (FtpWebRequest)FtpWebRequest.Create(adress);
    ftp.UseBinary = false;

    Et c'est tout. Mais je rencontre un nouveau petit prob :
    Parfois, le traitement s'arrête au plein milieu du téléchargement des fichiers. Je dis parfois parce que des fois les 1029 fichiers sont descendus, des fois pas. la console reste ouverte et au bout de qq temps, timeout [je l'ai par ailleurs mis à "infinite".
    Si vous avez une idée...
    Bonne soirée

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reqFTP.UsePassive = false;
    Et ton vœux sera exaucé

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Par défaut
    Citation Envoyé par DarkHerumor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reqFTP.UsePassive = false;
    Et ton vœux sera exaucé
    Merci de ta réponse! mais mon voeux n'est pas exaucé
    Des fois ça passe des fois pas. Il plante au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resp = ftp.GetResponse();
    et marque requested timed out [?]
    Si tu as 2 secondes afin de checker mon 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
    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
     
    public int Go(string srcTRIM, string destTRIM)
    {
        string fNAme = null, username = "username", pwd = "pwd";
        FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(srcTRIM);
        ftp.Method = WebRequestMethods.Ftp.ListDirectory;
        ftp.Credentials = new NetworkCredential(username, pwd);
        ftp.UsePassive = false;
        ftp.UseBinary = false;
     
        FtpWebResponse wr = (FtpWebResponse)ftp.GetResponse();
        System.IO.Stream stream = wr.GetResponseStream();
        StreamReader sr = new StreamReader(stream);
        WebResponse resp = (WebResponse)ftp.GetResponse();
     
        byte[] buffer = new byte[1024];
        int nbFiles = 0;
         while ((fNAme = sr.ReadLine()) != null)
         {
            // je ne traite que les fichiers .txt ...
            if (fNAme.Substring(fNAme.Length - 4, 4) == ".TXT")
            {
               nbFiles++;
               // je ne conserve que le nom du fichier...
               Uri adress = new Uri(srcTRIM + fNAme.Substring(fNAme.IndexOf("]") + 1, fNAme.Length - fNAme.IndexOf("]") - 1));
               ftp = (FtpWebRequest)FtpWebRequest.Create(adress);
               ftp.Method = WebRequestMethods.Ftp.DownloadFile;
               ftp.UseBinary = false;
               ftp.UsePassive = false;
               ftp.Credentials = new NetworkCredential(username, pwd);
     
               resp = ftp.GetResponse();
               System.IO.Stream sm = resp.GetResponseStream();
               FileStream output = new FileStream(destTRIM + fNAme.Substring(fNAme.IndexOf("]") + 1, fNAme.Length - fNAme.IndexOf("]") - 1), FileMode.OpenOrCreate);
               int bytesRead = 0;
               while (true)
               {
                  bytesRead = sm.Read(buffer, 0, buffer.Length);
                  output.Write(buffer, 0, bytesRead);
                  if (bytesRead <= 0)
                  {
                       break;
                  }
               }
               sm.Close();
               output.Flush();
               output.Close();
             }
          }
       }
    sr.Close();
    return nbFiles;
    }

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Par défaut
    Ma classe semble fonctionner de la même manière que la tienne. Essaie d'augmenter le Timeout de la FtpWebRequest? Sinon regarde du coté des paramètres de ton server FTP si tu peux.

    Perso, j'avais éxactement le même problème que toi, mais les modifications du Timeout et du UserPassive ont suffit pour résoudre le problème.

  9. #9
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Par défaut
    Citation Envoyé par DarkHerumor Voir le message
    Ma classe semble fonctionner de la même manière que la tienne. Essaie d'augmenter le Timeout de la FtpWebRequest? Sinon regarde du coté des paramètres de ton server FTP si tu peux.

    Perso, j'avais éxactement le même problème que toi, mais les modifications du Timeout et du UserPassive ont suffit pour résoudre le problème.
    Salut,
    Ben faut qd-même que je vienne donner des news ! Le problème provient sans aucun doute coté server [que je ne peux pas paramétrer moi-même].
    J'ai résolu le problème en mettant la propriété KeepAlive = FALSE sur mon FtpWebRequest.

    J'espère que ça pourra aider certains.
    @+ pour d'autre problèmes

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

Discussions similaires

  1. Etat téléchargement par evenement en c++/cli
    Par Zaltez dans le forum C++/CLI
    Réponses: 6
    Dernier message: 04/09/2007, 17h20
  2. Réponses: 4
    Dernier message: 12/05/2007, 15h35
  3. [Système] Téléchargement par HTTP d'un fichier
    Par Thierry8 dans le forum Langage
    Réponses: 20
    Dernier message: 06/06/2006, 11h42

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