Как я могу узнать, когда я достиг конца файла, используя метод ReadBlock в C #?

Я заметил, что он будет возвращать одни и те же прочитанные символы снова и снова, но мне было интересно, есть ли более элегантный способ.

22
задан abw333 23 June 2011 в 13:52
поделиться

2 ответа

Проверьте StreamReader.EndOfStream . Остановите цикл чтения, когда это будет true.

Убедитесь, что ваш код правильно обрабатывает возвращаемое значение для «количества прочитанных байтов» также в вызовах ReadBlock. Похоже, вы видите, что читается ноль байтов, и просто предполагаете, что неизмененное содержимое буфера, которое вы видите, является еще одним чтением тех же данных.

4
ответ дан 29 November 2019 в 04:01
поделиться

Когда возвращаемая длина чтения меньше, чем запрашиваемая длина чтения, вы в конце. Вы также должны следить за длиной чтения в случае, если размер вашего потока не идеально соответствует размеру буфера, поэтому вам необходимо учитывать более короткую длину данных в вашем буфере.

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

Вы также можете проверить флаг EndOfStream потока в вашем состоянии цикла. Я предпочитаю этот метод, так как вы не будете читать «0» (редкое условие, но это может произойти).

do{
      len = stream.ReadBlock(buffer, 0, buffer.Length);
      /* ... */
  }while(!stream.EndOfStream);
2
ответ дан 29 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: