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 :

parcours de dossier Erreur "Impossible de lire à partir d'un TextReader fermé." [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    technicien polyvalent debutant developpeur web / maintenance
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : technicien polyvalent debutant developpeur web / maintenance

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Points : 14
    Points
    14
    Par défaut parcours de dossier Erreur "Impossible de lire à partir d'un TextReader fermé."
    Bonjour,

    Alors voici je tente de faire un parcours récursif de mon serveur ftp.

    Alors j'ai:
    Création d'un fichier liste.txt contenant le résultat de liste directory sur la racine du 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
     
    Uri serverUri = new Uri(words[0]);
    if (serverUri.Scheme != Uri.UriSchemeFtp)
    {
        txtLog.Text += "/n" + messageRecu.strMessage + "/n";
        return;
    }
    FtpWebRequest myRequest=(FtpWebRequest)FtpWebRequest.Create(serverUri);
    txtLog.Text += "\n" + myRequest.RequestUri.ToString() + "\n";
    myRequest.Credentials = new NetworkCredential(words[2] ,words[1]);
    myRequest.KeepAlive = false;
    myRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    txtLog.Text += "\r\n" + myRequest.Method.ToString() + "\r\n";
    FtpWebResponse response = (FtpWebResponse)myRequest.GetResponse();
    txtLog.Text += "\r\n" + response.WelcomeMessage + "\r\n";
    Stream responseStream = response.GetResponseStream();
    foreach (char machaine in myRequest.Method)
    {
         txtLog.Text += "\r\n" + machaine + "\r\n";
    }
    FileStream fs = new FileStream("C:/ftp/" + "liste.txt", FileMode.Create);
     
     byte[] buffer = new byte[2000];
     int read = 0;
     
    do
    {
       read = responseStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, read);
        fs.Flush();
       } while (!(read == 0));
     
    response.Close();
    responseStream.Close();
    fs.Close();
    string Dossier = "0";
    lectureFichier("C:/ftp/liste.txt", words, Dossier);
    Fonction LectureFichier() qui ouvre le fichier, le traite et télécharge si c'est un fichier ou se place dans le répertoire si c'est un dossier.
    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
    93
    94
    95
    96
    97
    98
    99
    100
     
    public void lectureFichier(string fichier, string[] words, string Dossier)
            {
                try
                {
                    // Création d'une instance de StreamReader pour permettre la lecture de notre fichier 
                    StreamReader monStreamReader = new StreamReader(fichier);
                    string ligne = monStreamReader.ReadLine();
                    string dossier;
                    string fichierAdl;
                    //string cible;
                    // Lecture de toutes les lignes et affichage de chacune sur la page 
                    while (ligne != null)
                    {
                        if (Dossier == "0")
                        {
                            dossier = ligne.Substring(0, 1);
                            MessageBox.Show(dossier);
                            if (dossier != "d")
                            {
                                MessageBox.Show("rentrer dans le if pour les fichier");
                                fichierAdl = ligne.Substring(46, ligne.Length - 46);
                                string url = words[0] + "/" + fichierAdl;
                                MessageBox.Show(url);
                                Uri serverUri = new Uri(url);
                                FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                                myRequest.Credentials = new NetworkCredential(words[2], words[1]);
                                myRequest.KeepAlive = true;
                                myRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                                FtpWebResponse response = (FtpWebResponse)myRequest.GetResponse();
                                Stream responseStream = response.GetResponseStream();
                                FileStream fs = new FileStream("C:/ftp/" + fichierAdl, FileMode.Create);
                                byte[] buffer = new byte[2000];
                                int read = 0;
                                do
                                {
                                    read = responseStream.Read(buffer, 0, buffer.Length);
                                    fs.Write(buffer, 0, read);
                                    fs.Flush();
                                } while (!(read == 0));
                                response.Close();
                                responseStream.Close();
                                fs.Close();
                            }
                            else
                            {
                                MessageBox.Show("rentrer dans le else pour les dossier");
                                string DossierUrl = ligne.Substring(46, ligne.Length - 46);
                                MessageBox.Show(DossierUrl);
                                if ((DossierUrl == ".") || (DossierUrl == ".."))
                                {
     
                                    MessageBox.Show("dossier . et .. non pris en compte");
                                }
                                else
                                {
                                    MessageBox.Show("verification OK");
                                    string url = words[0] + "/" + DossierUrl;
                                    string activeDir = @"C:\ftp\";
                                    string newPath = System.IO.Path.Combine(activeDir, DossierUrl);
                                    System.IO.Directory.CreateDirectory(newPath);
                                    MessageBox.Show("Le chemin local est:" + newPath);
                                    MessageBox.Show("Le nom du dossier en cours est:" + DossierUrl);
                                    MessageBox.Show("L'url en cours est:" + url);
                                    Uri serverUri = new Uri(url);
                                    if (serverUri.Scheme != Uri.UriSchemeFtp)
                                    {
                                        return;
                                    }
                                    FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                                    txtLog.Text += "\n" + myRequest.RequestUri.ToString() + "\n";
                                    myRequest.Credentials = new NetworkCredential(words[2], words[1]);
                                    myRequest.KeepAlive = false;
                                    myRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                                    FtpWebResponse response = (FtpWebResponse)myRequest.GetResponse();
                                    Stream responseStream = response.GetResponseStream();
                                    FileStream fs = new FileStream(newPath + "/liste.txt", FileMode.Create);
                                    byte[] buffer = new byte[2000];
                                    int read = 0;
     
                                    do
                                    {
                                        read = responseStream.Read(buffer, 0, buffer.Length);
                                        fs.Write(buffer, 0, read);
                                        fs.Flush();
                                    } while (!(read == 0));
     
                                    response.Close();
                                    responseStream.Close();
                                    fs.Close();
                                    lectureFichier(newPath + "/liste.txt", words, DossierUrl);
                                }
                            }
     
                            ligne = monStreamReader.ReadLine();
                        }
                        else
                        {
                            MessageBox.Show("parcour Recursif a faire ici");
                        }
    Pour l'instant je bloque a cause de cette erreur que je ne comprends pas.

    Impossible de lire à partir d'un TextReader fermé.
    Merci pour toute aide ou conseils


    C'est bon j'ai régler le souci. J'avais mal placer le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monStreamReader.Close();

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Salut,

    je n'ai jamais utilisé de FilStream, mais à vue d'oeil ne devrais-tu pas mettre fs.open avant de l'utiliser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       read = responseStream.Read(buffer, 0, buffer.Length);
       fs.Open();
        fs.Write(buffer, 0, read);

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/03/2015, 18h40
  2. Réponses: 2
    Dernier message: 17/07/2014, 10h52
  3. [XL-2007] Erreur 1004: Impossible de lire la propriété Vlookup
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2012, 17h46

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