Загрузка веб-страницы в примере C # - PullRequest
1 голос
/ 02 мая 2010

Я пытаюсь понять пример кода на этой веб-странице: (http://www.csharp -station.com / HowTo / HttpWebFetch.aspx ), который загружает файл из Интернета ,

Часть кода, приведенная ниже, проходит через цикл, собирая куски данных и сохраняя их в строку, пока все данные не будут загружены. Насколько я понимаю, «count» содержит размер загруженного чанка, и цикл продолжается до тех пор, пока count не станет равным 0 (загружается пустой чанк данных).

У меня вопрос: не может ли быть значение 0, если файл полностью не загружен? Скажем, если сетевое соединение прервано, поток может не иметь каких-либо данных для чтения на проходе цикла, и число должно быть 0, что преждевременно завершает загрузку. Или ResStream.Read останавливает программу, пока она не получает данные? Это правильный способ сохранить поток?

    int count = 0;

      do
      {
       // fill the buffer with data
       count = resStream.Read(buf, 0, buf.Length);

       // make sure we read some data
       if (count != 0)
       {
        // translate from bytes to ASCII text
        tempString = Encoding.ASCII.GetString(buf, 0, count);

        // continue building the string
        sb.Append(tempString);
       }
      }
      while (count > 0); // any more data to read?

1 Ответ

3 голосов
/ 02 мая 2010

Stream.Read вернет 0 только после достижения конца потока. Вызов Read будет блокироваться, пока не будут доступны данные или соединение не будет закрыто.

Код будет работать как есть, но его можно упростить:

int count;

while ((count = resStream.Read(buf, 0, buf.Length)) > 0)
{
    // translate from bytes to ASCII text
    string tempString = Encoding.ASCII.GetString(buf, 0, count);

    // continue building the string
    sb.Append(tempString);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...