如何将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
相关产品推荐
相关产品推荐

