You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将WebClient的ResponseHeaders["Content-Length"]转换为格式化字节单位显示

解决方法

核心问题有两个:

  • 你最初的代码参数类型不匹配:FormatBytes方法要求传入long类型参数,但是你直接把client.ResponseHeaders["Content-Length"]转成字符串传入,类型不匹配无法正常执行。
  • 你测试的纯数字输出写法,是因为仅对响应头做了类型转换后直接转字符串输出,没有调用FormatBytes方法执行单位格式化逻辑。

推荐实现(带异常兼容)

建议用long.TryParse做合法性校验,避免响应头为空、格式异常时抛出运行时错误:

client.DownloadProgressChanged += (s, e) => 
{
    string contentLengthVal = client.ResponseHeaders["Content-Length"];
    if (long.TryParse(contentLengthVal, out long contentLength))
    {
        lblDownloadSize.Text = FormatBytes(contentLength);
    }
    else
    {
        // 无法获取文件大小时的兜底显示
        lblDownloadSize.Text = "未知大小";
    }
};

简化实现(确认响应头一定合法时可用)

如果你能保证请求一定能返回合法的Content-Length响应头,可以直接简写为:

client.DownloadProgressChanged += (s, e) => lblDownloadSize.Text = FormatBytes(Convert.ToInt64(client.ResponseHeaders["Content-Length"]));

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:04