2011-06-23 18 views

Respuesta

41
while(!streamReader.EndOfStream) 
{ 
    string line = streamReader.ReadLine(); 
    Console.WriteLine(line); 
} 
Console.WriteLine("End of File"); 
2

Verificar StreamReader.EndOfStream. Detenga su ciclo de lectura cuando sea true.

Asegúrese de que su código maneja correctamente el valor devuelto para "conteo de bytes recién leídos" en llamadas ReadBlock también. Parece que está viendo cero bytes leídos, y simplemente asumiendo que el contenido del buffer sin cambios que ve es otra lectura de los mismos datos.

1

De MSDN para ReadBlock():

Valor devuelto Tipo: System.Int32 La posición de la corriente subyacente es avanzado por el número de caracteres que se lee en la memoria intermedia. El número de caracteres que se han leído. El número será menor o igual que recuento, dependiendo de si se han leído todos los caracteres de entrada.

Así que supongo que es EOF cuando se devuelve 0,

2

Cuando la longitud de leer devuelto es menor que la longitud de su lectura solicitada, que estamos en el final. También debe hacer un seguimiento de la longitud de lectura en caso de que el tamaño de su secuencia no coincida perfectamente con el tamaño de su búfer, por lo que debe tener en cuenta la longitud más corta de los datos en su búfer.

do{ 
    len = stream.ReadBlock(buffer, 0, buffer.Length); 
    /* ... */ 
    }while(len == buffer.Length); 

También puede comprobar la bandera EndOfStream de la corriente en su condición de bucle también. Prefiero este método ya que no harás una lectura de '0' de longitud (condición rara, pero puede suceder).

do{ 
     len = stream.ReadBlock(buffer, 0, buffer.Length); 
     /* ... */ 
    }while(!stream.EndOfStream); 
2

Por desgracia, no puedo comentar sobre respuestas, pero a la respuesta por "The Moof" ...

La utilización del cur aquí está fuera de lugar, como el parámetro index es para el índice de buffer donde la escritura debe comenzar. Por lo tanto, para sus ejemplos, debe reemplazarse por 0 en la llamada al stream.ReadBlock.

Cuestiones relacionadas