Tengo un archivo de texto que quiero leer línea por línea y registro la posición en el archivo de texto a medida que avanzo. Después de leer cualquier línea del archivo, el programa puede salir, y debo reanudar la lectura del archivo en la siguiente línea cuando se reanude.¿Por qué FileStream.Position aumenta en múltiplos de 1024?
Aquí hay un código de ejemplo:
using (FileStream fileStream = new FileStream("Sample.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fileStream.Seek(GetLastPositionInFile(), SeekOrigin.Begin);
using (StreamReader streamReader = new StreamReader(fileStream))
{
while (!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
DoSomethingInteresting(line);
SaveLastPositionInFile(fileStream.Position);
if (CheckSomeCondition())
{
break;
}
}
}
}
Cuando ejecuta este código, el valor de fileStream.Position
no cambia después de leer cada línea, que sólo avanza después de leer un par de líneas. Cuando cambia, aumenta en múltiplos de 1024. Ahora supongo que hay algo de almacenamiento intermedio bajo las cubiertas, pero ¿cómo puedo registrar la posición exacta en el archivo?
que tal vez equivocada, pero es posible que tenga que leer char/byte a la vez con el fin de utilizar su posición sin amortiguación. O use las sobrecargas que aceptan una matriz byte/char. Entonces puedes hacer el buffering exacto tú mismo ... – Nate
Estoy de acuerdo con Nate. Si desea una posición precisa, tendrá que hacerlo usted mismo con las versiones char [] de Read & ReadBlock. Supongo que ReadLine lee en un bloque de 1024 caracteres y luego devuelve las subcadenas entre \ n \ r caracteres. –