我正在开发一个从给定 URL 下载视频的应用程序。问题是我没有收到整个文件内容,然后无法播放文件。例如,尝试下载大小约为 2.23 MB 的视频,我只能得到 ~2.11 MB。当我在浏览器中使用 URL 时,它会显示一个对话框来保存视频并且文件已成功下载。
我尝试过使用WebClient
类并且它可以工作,但我想分块下载文件以便能够报告状态(完成百分比)。这是我使用的代码:
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
int bufferSize = 1024 * 300;
string filePath = saveFileDialog.FileName;
if (File.Exists(filePath))
File.Delete(filePath);
int totalBytes = 0;
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(DownloadUrl);
long contentLength = webRequest.GetResponse().ContentLength;
using (Stream webStream = webRequest.GetResponse().GetResponseStream())
using (StreamReader reader = new StreamReader(webStream))
using (BinaryWriter fileWriter = new BinaryWriter(File.Create(filePath)))
{
do
{
char[] buffer = new char[bufferSize];
bytesRead = reader.ReadBlock(buffer, 0, bufferSize); // also tried with Read(buffer, 0, bufferSize);
totalBytes += bytesRead;
Console.WriteLine("Bytes read: " + bytesRead + " Total Bytes: " + totalBytes + " Content length: " + contentLength);
if (bytesRead > 0)
fileWriter.Write(buffer, 0, bytesRead);
} while (!reader.EndOfStream);
}
}
我也尝试阅读 until bytesRead = 0
,但结果相同。有什么我想念的吗?