Je suis en train d'analyser un très grand fichier d'enregistrements (un par ligne, chacun de longueur variable), et je voudrais garder une trace du nombre d'octets que j'ai lus dans le fichier afin que je puisse récupérer dans l'événement d'un échec.Comment compter le nombre d'octets lus par TextReader.ReadLine()?
j'écrit ce qui suit:
using (TextReader myTextReader = CreateTextReader())
{
string record = myTextReader.ReadLine();
bytesRead += record.Length;
ParseRecord(record);
}
Toutefois, cela ne fonctionne pas depuis ReadLine()
bandes des caractères CR/LF dans la ligne. En outre, une ligne peut être terminée par des caractères CR, LF ou CRLF, ce qui signifie que je ne peux pas ajouter 1 à bytesRead
.
Existe-t-il un moyen facile d'obtenir la longueur de ligne réelle, ou est-ce que j'écris ma propre méthode ReadLine()
en termes d'opérations granulaires Read()
?
Cela ne fonctionne que si le flux sous-jacent soutient la recherche, qui travaille probablement dans votre cas, mais je tiens à souligner que cette méthode ne fonctionnera pas pour tous les cas. –
Il peut également y avoir un problème si le StreamReader est mis en mémoire tampon où le BaseStream avance en segments. – sisve
Cela ne fonctionne définitivement pas car pour des raisons de performances, TextReader lit les flux de base en blocs de 4096 octets au lieu de byte by byte. C'est en fait la même chose que ce que Simon a dit. –