首页 文章

在C#示例中下载网页

提问于
浏览
1

我试图了解这个网页上的一些示例代码:(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

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

相关问题