在C#示例中下载网页

时间:2010-05-01 21:35:33

标签: c# stream

我正在尝试了解此网页上的一些示例代码:( 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 个答案:

答案 0 :(得分:3)

只有在到达流末尾时,

Stream.Read才会返回0Read调用将阻止,直到有可用数据或连接已关闭。

代码将按原样运行,但可以简化:

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);
}