Noté que seguirá repitiendo los mismos caracteres de lectura una y otra vez, pero me preguntaba si había una manera más elegante.¿Cómo puedo saber cuándo llegué al final del archivo cuando uso el método ReadBlock en C#?
Respuesta
while(!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
Console.WriteLine(line);
}
Console.WriteLine("End of File");
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.
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,
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);
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
.
- 1. ¿Cómo determinar cuándo se ha alcanzado el final del archivo?
- 2. Escribiendo al final del archivo
- 3. ¿Cuándo uso el método initWithCoder?
- 4. jQuery: cómo saber cuándo next() llega al final, luego vaya al primer elemento
- 5. ¿Cómo puedo saber cuándo finaliza un gesto de pellizco (UIGestureRecognizer)?
- 6. ¿Cómo saber cuando el objeto AudioTrack ha terminado de reproducirse?
- 7. C# - ¿Cómo saber cuándo Windows está "resuelto" después del inicio?
- 8. Cómo saber el uso de memoria en C++
- 9. Nunca llegué a 480 * 800 cuando uso proyección ortogonal 2D en OpenGL-ES
- 10. bison final del archivo
- 11. ¿Cómo puedo saber cuándo NSTextView pierde foco?
- 12. Objetivo C - ¿Cómo uso el método initWithCoder?
- 13. ¿Cómo puedo saber cuándo ha llegado el último OutputDataReceived?
- 14. ¿Cómo puedo saber cuándo un EditText pierde el foco?
- 15. cómo llegué a saber si cancelo la suscripción desde el sitio de Paypal
- 16. El método Java split() elimina las cadenas vacías al final?
- 17. WCF: ¿Cómo saber cuándo termina una sesión?
- 18. Función de declaración al final del archivo en Python
- 19. ¿Cómo puedo saber cuándo WindowsFormsHost está redimensionando en WPF?
- 20. ¿Cómo puedo saber cuándo se carga una imagen en Picturebox
- 21. ¿Cómo saber si un enumerador ha llegado al final de la colección en C#?
- 22. ¿Cómo saber el final de int * array?
- 23. ¿Cómo uso el método publishResults() cuando extiendo filtros en Android?
- 24. ¿Cómo puedo saber cuándo se carga el contenido de ContentControl al cambiar
- 25. writeToFile cómo saber cuándo se completó
- 26. iPhone SDK: ¿cómo puedo saber cuándo ha finalizado una animación?
- 27. C# FileSystemWatcher, Cómo saber cómo se copió el archivo por completo en la carpeta del reloj
- 28. ¿Cómo puedo saber cuándo se tomó una foto en C# corriendo en Vista?
- 29. Adición de texto al principio y al final del archivo en C#
- 30. vim búsqueda incremental detener al final del archivo