C#下载和上传文件的几种方法
C#下载和上传文件的几种方法方法一:迅雷方法二:WebClient下载文件上传文件提供基于.Net 4.0下的几种方法,不采用4.5的原因很简单,XP不支持方法一:迅雷迅雷下载组件,此方法有一个致命缺点,就是同局域网会抢占其它电脑网速,让局域网的其它人瞬间想骂GAI添加XLEngine.cs类到项目里添加xldl.dll类到项目里复制到输出目录:如果较新则复制生成操作:...
·
C#下载和上传文件的几种方法
提供基于.Net 4.0下的几种方法,不采用4.5的原因很简单,XP不支持
方法一:迅雷
迅雷下载组件,此方法有一个致命缺点,就是同局域网会抢占其它电脑网速,让局域网的其它人瞬间想骂GAI
- 添加
XLEngine.cs
类到项目里 - 添加
xldl.dll
类到项目里
复制到输出目录:
如果较新则复制
生成操作:内容
- 添加
download
目录到项目里,里面的所有文件也要按照以下属性设置
复制到输出目录:
如果较新则复制
生成操作:内容
XLEngine.cs
和其它文件
下载地址:链接:https://pan.baidu.com/s/1JmHmFne5wfP1imwPpUEQpg 提取码:mz5o
文件目录结构如图所示:
project
└───download
│ atl71.dll
│ dl_peer_id.dll
│ download_engine.dll
│ id.dat
│ MiniThunderPlatform.exe
│ minizip.dll
│ msvcp71.dll
│ msvcr71.dll
│ XLBugHandler.dll
│ XLBugReport.exe
│ zlib1.dll
└───XLEngine.cs
└───xldl.dll
- 设置任务参数
XL.DownTaskParam p = new XL.DownTaskParam()
{
szTaskUrl = item.url,
szFilename = item.savefilename,
szSavePath = App.downSaveDirPath
};
- 创建下载任务,返回句柄,后面可以通过句柄获取当前任务状态
var hi = XL.XL_CreateTask(p);
- 开始下载任务,使用任务句柄开始对应下载任务的下载工作,返回布尔值
var result = XL.XL_StartTask(hi);
- 实例化一个下载任务信息对象,通过任务句柄,可以将任务的当前信息返回到下载任务信息对象中
XL.DownTaskInfo info = new XL.DownTaskInfo();
var flag = XL.XL_QueryTaskInfoEx(hi, info);
DownTaskInfo里主要有如下属性,还有其它属性,自己研究吧
stat
:任务状态fail_code
:错误代码szFilename
:存储文件名szSavePath
:存储位置目录fPercent
:进度,乘100就是百分比通过
info.stat == XL.DOWN_TASK_STATUS.TSC_COMPLETE
,可以判断任务是否下载完成,XL.DOWN_TASK_STATUS
中存储的是任务的各种下载状态
方法二:WebClient
此方法可上传,可下载文件
下载文件
- 构建下载任务
WebClient client = new WebClient();
client.DownloadFileCompleted += client_DownloadFileCompleted;
client.DownloadProgressChanged += client_DownloadProgressChanged;
client.DownloadFileAsync(new Uri(url(" ", "%20")), System.IO.Path.Combine(dir_path, "file.zip"));
下载地址中的空格需要用转移字符替换了
- 绑定事件
private static void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
App.MainWindow.Dispatcher.Invoke((Action)delegate
{
App.MainWindow.progress_state.Maximum = (int)e.TotalBytesToReceive;
App.MainWindow.progress_state.Value = (int)e.BytesReceived;
App.MainWindow.txt_state.Text = "总下载:" + e.ProgressPercentage + "%";
});
}
private static void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
App.MainWindow.Dispatcher.Invoke((Action)delegate
{
App.MainWindow.progress_state.Value = 100.0;
App.MainWindow.txt_state.Text = "下载完成...";
});
}
如果下载地址是传的文件流,需要在头标识里添加文件流的长度,不然进度条会失效,但是不影响下载
上传文件
和下载文件基本相同,只是调用的方法不同
UploadFileCompleted
UploadProgressChanged
UploadFileAsync
更多推荐
已为社区贡献1条内容
所有评论(0)