我正在尝试了解此网页上的一些示例代码:( 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?
答案 0 :(得分: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);
}