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 :

Pb Seek StreamReader


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut Pb Seek StreamReader
    Bonjour à tous,

    J'utilise un StreamReader pour récupérer des données d'un fichier html.
    Ayant besoin de récupérer des données non contigues, j'utilise la méthode BaseStream.seek de mon streamReader pour me déplacer ds mon fichier mais il semblerait que cela ne fonctionne pas bien que la valeur de BaseStream.Position soit bien modifiées...

    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
     
    if (!FinalLvl1.Contains(TypeFd))
    {
              // saving current position
              position = sr.BaseStream.Seek(0, SeekOrigin.Current);
     
              // Go to Field Definition
              sr.BaseStream.Seek(FieldDepart, SeekOrigin.Begin);
     
              // Populate Element
              PopulateFieldWithElement(FieldDepart, Name, TypeFd, FinalLvl1, sr, writer);
     
              // restore position
              sr.BaseStream.Seek(position, SeekOrigin.Begin);
    }
    Dans le code ci-dessus:
    - je sauvegarde la position de mon curseur
    - je me déplace à un offset bien précis défini précédemment
    - j'appelle une méthode avec un paramètre mon streamreader (le curseur du mon sr sera amené à bouger!)
    - je restaure l'ancienne position du curseur.

    Le pb c'est que mon curseur semble ne pas se repositionner à la position 'position' par contre sa valeur est correcte (égale à 'position'). Il conserve la valeur affectée par le dernier readline() de la méthode 'PopulateFieldWithElement'.

    Je ne comprend pas pourquoi mon curseur est dans les choux bien que la valeur de BaseStream.Position soit égale à 'position'!!!!

    quelqu'un a des idées ?

  2. #2
    Membre éprouvé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Par défaut
    Bonjour,

    La ligne que tu utilises pour sauvegarder la position, me parait bizarre, pourquoi tu n'utilise pas simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    position = sr.BaseStream.Position;

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le StreamReader ne permet pas de se repositionner exactement comme on le souhaiterait (la position est liée au buffer et non à l'emplacement où l'on se trouve dans le fichier). Si tu fais une recherche sur Google tu verras que beaucoup de monde a rencontré ce problème ^^

    Il faut peut être envisager de lire le fichier autrement pour extraire tes données.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Effectivement BaseStream.Position renvoie la position du buffer interne utilisé par le streamreader donc pas moyen de s'en servir tel que.
    J'ai résolu mon pb en gérant un offset que j'incrémente à chaque Readline avec la taille de ma ligne lue + 1 pour le cr.
    C'est pas ultra classe mais ca marche bien.

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    alors

Discussions similaires

  1. seek & CHttpFile
    Par hiko-seijuro dans le forum MFC
    Réponses: 9
    Dernier message: 11/01/2007, 15h14
  2. StreamWriter et StreamReader
    Par robert.michel9 dans le forum Delphi .NET
    Réponses: 3
    Dernier message: 26/12/2005, 11h26
  3. Réponses: 1
    Dernier message: 11/08/2005, 17h33
  4. Équivalent de Seek pour un TextFile
    Par WebPac dans le forum Langage
    Réponses: 11
    Dernier message: 24/11/2004, 15h01
  5. ADODataset, indexName, fonction seek
    Par StarMusic dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/02/2004, 07h52

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