在项目开发中经常会用到下载文件,这里使用winform实现了一个带进度条的例子。
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace Wolfy.DownLoad
- {
- public partial class MainFrm : Form
- {
- private string _saveDir;
- public MainFrm()
- {
- InitializeComponent();
- _saveDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "download");
- }
-
- private void MainFrm_Load(object sender, EventArgs e)
- {
-
- if (!Directory.Exists(_saveDir))
- {
- Directory.CreateDirectory(_saveDir);
- }
-
- }
-
- private void btnDownLoad_Click(object sender, EventArgs e)
- {
- string imageUrl = "https://www.cdsy.xyz/d/file/computer/system/Windows/2023-10-30/44fa7e8300c21d33aae6bdecc9bced60.png";
-
- string fileExt = Path.GetExtension(imageUrl);
- string fileNewName = Guid.NewGuid() + fileExt;
- bool isDownLoad = false;
- string filePath = Path.Combine(_saveDir, fileNewName);
- if (File.Exists(filePath))
- {
- isDownLoad = true;
- }
- var file = new FileMessage
- {
- FileName = fileNewName,
- RelativeUrl = "d/file/computer/system/Windows/2023-10-30/44fa7e8300c21d33aae6bdecc9bced60.png",
- Url = imageUrl,
- IsDownLoad = isDownLoad,
- SavePath = filePath
- };
-
- if (!file.IsDownLoad)
- {
-
- string fileDirPath = Path.GetDirectoryName(file.SavePath);
- if (!Directory.Exists(fileDirPath))
- {
- Directory.CreateDirectory(fileDirPath);
- }
- try
- {
- WebClient client = new WebClient();
- client.DownloadFileCompleted += client_DownloadFileCompleted;
- client.DownloadProgressChanged += client_DownloadProgressChanged;
- client.DownloadFileAsync(new Uri(file.Url), file.SavePath, file.FileName);
- }
- catch
- {
-
- }
-
- }
- }
- void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
- {
- if (e.UserState != null)
- {
- this.lblMessage.Text = e.UserState.ToString() + ",下载完成";
- }
- }
-
- void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
- {
- this.proBarDownLoad.Minimum = 0;
- this.proBarDownLoad.Maximum = (int)e.TotalBytesToReceive;
- this.proBarDownLoad.Value = (int)e.BytesReceived;
- this.lblPercent.Text = e.ProgressPercentage + "%";
- }
- }
- }
测试