【问题标题】:Downloading a webpage in C# example在 C# 示例中下载网页
【发布时间】:2010-05-01 21:35:33
【问题描述】:

我正在尝试了解此网页上的一些示例代码:(http://www.csharp-station.com/HowTo/HttpWebFetch.aspx) 从 Internet 下载文件。

下面引用的一段代码通过一个循环获取数据块并将它们保存到一个字符串中,直到所有数据都下载完毕。据我了解,“count”包含下载块的大小,循环运行直到 count 为 0(下载了一个空的数据块)。

我的问题是,如果没有完全下载文件,计数是否可能为 0?假设如果网络连接中断,则流可能没有任何数据可在循环通过时读取,并且计数应为 0,过早结束下载。或者 ResStream.Read 会停止程序直到它获取数据?这是保存流的正确方法吗?

整数计数 = 0; 做 { // 用数据填充缓冲区 计数 = resStream.Read(buf, 0, buf.Length); // 确保我们读取了一些数据 如果(计数!= 0) { // 从字节转换为 ASCII 文本 tempString = Encoding.ASCII.GetString(buf, 0, count); // 继续构建字符串 sb.Append(tempString); } } 而(计数> 0); // 还有更多数据要读取吗?

【问题讨论】:

标签: c# stream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多