none
Urgent probleme ecriture dans fichier ASCII RRS feed

  • Question

  • Bonjour a tous,
    Dand le cadre d'un projet pour mon travail, je dois écrire dans un fichier texte en ASCII à partir d'une certaine ligne, ces lignes étant identifie par des CRLF, pour optimiser le temps d'éxécution de mon logiciel aussi j'utilise le code suivant:

    //Debug.WriteLine(fs.Seek(0, SeekOrigin.Current));
                        //Sinon on défile et on ecrit
                        sr = new StreamReader(fs);
                        while (cptline < pointeurLineInFileOut)
                        {
                            ligne=sr.ReadLine();
                            //Nbcar += sr.;
                            cptline++;
                        }
                        //fs.Seek(ligne.Length, SeekOrigin.Current);
                        //Quand on sort de la obn va écrire sur la ligne suivante au pointeur
                       
                        fs.Position = sr.Peek();
                        sw = new StreamWriter(fs);
                        sw.WriteLine("Tralala");
                        //Puis on ecrit le reste des données filtés et trier
                        for (int i = 0; i < this.Count; i++)
                        {
                            ligne = this[i].GetTrame();
                            sw.WriteLine(ligne);
                        }
                        //sw.WriteLine("FIN");
                        this.TotalLineInFileOut = this.pointeurLineInFileOut + this.Count;
                        this.pointeurLineInFileOut += (this.Count) - MAX_TRAME_TO_COMPARE;
                        sw.Close();
                        sr.Close();
                    }
                    // Fermeture du StreamWriter (Très important) 
                    fs.Close();


    pour tester mon code j'essaie d'ecrire "tralala" au debut de la ligne a partir du numéro de ligne indiqué par l'entier pointeurLineInFileOut mais le probleme est que le mot Tralala est ecrit au milieu de la ligne et non au debut.
    J'ai aussi essaye de jouer un peu avec les methodes et proprites sekk et position mais sans résultat.

    D'avance merci de me répondre le plus vite possible.


    dimanche 22 février 2009 11:07

Réponses

  • Le problème est que la position dans le flux de lecture est incorrecte. Le StreamReader utilise un buffer. Lors de l'appel à la méthode readline, le stream reader lit plus de données que nécessaire pour des raisons de performance. La position renvoyée par le flux ne sera pas celle de fin de ligne et il ne sera donc pas possible de positionner le flux d'écriture avec la position du flux de lecture.
    Une approche proposée est d'écrire sa propre méthode readline. Voici une discussion à ce sujet.

    Une approche plus simple consisterait à stocker toute les lignes dans une liste, faire l'ajout dans cette liste, puis à écrire son contenu.

    Un dernier point sr.Peek() renvoi un int du dernier caractère. Si besoin il peut être caster en char, il ne te permet donc pas de te positionner dans le flux.
    mercredi 25 février 2009 11:54
    Modérateur

Toutes les réponses

  • Pourquoi ne récupèrerais-tu pas ta ligne en
    string  
    puis tu concatènes ton texte en le préfixant ?
    mardi 24 février 2009 08:25
  • Le problème est que la position dans le flux de lecture est incorrecte. Le StreamReader utilise un buffer. Lors de l'appel à la méthode readline, le stream reader lit plus de données que nécessaire pour des raisons de performance. La position renvoyée par le flux ne sera pas celle de fin de ligne et il ne sera donc pas possible de positionner le flux d'écriture avec la position du flux de lecture.
    Une approche proposée est d'écrire sa propre méthode readline. Voici une discussion à ce sujet.

    Une approche plus simple consisterait à stocker toute les lignes dans une liste, faire l'ajout dans cette liste, puis à écrire son contenu.

    Un dernier point sr.Peek() renvoi un int du dernier caractère. Si besoin il peut être caster en char, il ne te permet donc pas de te positionner dans le flux.
    mercredi 25 février 2009 11:54
    Modérateur
  • Merci à vous pour vos réponse et je m'excuse d'avoir laissé trainer ce sujet depuis des années.

    mardi 9 décembre 2014 08:32