FileStream est en position off après l'appel de ReadLine() à partir de C#

Je suis en train de lire une (petite-ish) le fichier en morceaux de quelques lignes à un moment, et j'ai besoin de retourner au début de particulier morceaux.

Le problème est que, après le premier appel à

streamReader.ReadLine();

la streamReader.BaseStream.Position propriété est définie à la fin du fichier! Maintenant, je suppose que certains de la mise en cache se fait dans les coulisses, mais je m'attendais à cette propriété pour refléter le nombre d'octets qui je utilisé à partir de ce fichier. Et oui, le fichier a plus d'une ligne 🙂

Par exemple, l'appel ReadLine() de nouveau (naturellement) le retour de la ligne suivante dans le fichier, ce qui ne démarre pas à la position précédemment rapporté par streamReader.BaseStream.Position.

Comment puis-je trouver les réelle position où la 1ère ligne se termine, donc, je peux y revenir plus tard?

Je ne peux que penser à faire manuellement la tenue de la comptabilité, en ajoutant de la longueur des chaînes de caractères retournée par ReadLine(), mais même ici, il ya un couple de mises en garde:

  • ReadLine() supprime le caractère de nouvelle ligne(s) qui peut avoir une longueur variable ('\n'? Est-il "\r\n"? Etc.)
  • Je ne sais pas si ce serait le travail OK avec la longueur variable des caractères

...donc, pour l'instant il semble que ma seule option est de repenser la façon dont je parse le fichier, donc je n'ai pas à revenir en arrière.

Si cela peut aider, j'ai ouvert mon fichier comme ceci:

using (var reader = new StreamReader(
        new FileStream(
                       m_path, 
                       FileMode.Open, 
                       FileAccess.Read, 
                       FileShare.ReadWrite)))
{...}

Des suggestions?

OriginalL'auteur Cristi Diaconescu | 2010-05-28