C#做下载文件,多个下载的问题

MrYoung 2010-03-11 06:30:16
目前需要写一个小程序 实现的功能就是定时去指定的URL下载文件,这下载的不只一个文件 问题就是如何让程序多个下载同时多线程执行或如何来下载完一个文件后继续下载下一个文件,C/S的程序,要有进度条显示,大家能否给个DEMO或说下思路,我知道用线程,现在思路比较混乱
...全文
442 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shsoft888 2010-03-12
  • 打赏
  • 举报
回复
我这有例子,我自己做的,以经用在了公司的软件自动更新中。

程序思路就是用WCF的流操作。

代码发上来太长了,我说下思路,不明白加我QQ号:9096198

服务端我自定议了一个XML文件,里面配制着软件版本号所要更新的文件列表。

客户端也有个自定议的XML文件,里面记录着服务器URL及端口。

在客户端调用服务端的方法,获取到指定版本号要更新的文件列表。

获取到列表后,调用服务端方法DownloadFile下载指定的文件。

DownloadFile方法代码如下:
public MyFileInfo DownloadFile(DownloadFileRequest request)
{
try
{
FSDownloadConfig fsdc = new FSDownloadConfig();

string path = fsdc.FileDirectory(request.Ver);
FileInfo fi = new FileInfo(path + request.FileName);
FileStream fStream = File.OpenRead(path + request.FileName);
MyFileInfo result = new MyFileInfo(fStream, request.FileName, fi.Length);
return result;
}
catch (FileNotFoundException)
{
throw new FaultException(new FaultReason("服务器端没有找到要下载的文件!"));
}
}

客户端下载文件时,可以开启多个线程来调用这个方法,可以实现多线程同时下载。

客户端下载文件代码如下:
private void downFile()
{
ChannelFactory<IFileManager> _factory = new ChannelFactory<IFileManager>(_bind, new EndpointAddress(_baseAddress));

IFileManager manager = _factory.CreateChannel();
string remoteFileName = _filename;
MyFileInfo fileInfo = manager.DownloadFile(new DownloadFileRequest(_ver, remoteFileName));
FileStream fs = File.Create(fileInfo.FileName);
int bytesRead = 0;
long totalBytesRead = 0;
byte[] buffer = new byte[10000];
do
{
bytesRead = fileInfo.Stream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
double currentProgress = ((double)totalBytesRead) / fileInfo.FileSize;
if (DownloadProgressEvent != null)
{
DownloadEvent de = new DownloadEvent();
de.FileName = fileInfo.FileName;
de.Size = fileInfo.FileSize;
de.DwSize = totalBytesRead;
de.Progress = Convert.ToInt32(currentProgress * 100);
this.DownloadProgressEvent(this, de);
}
} while (bytesRead > 0);
fs.Close();
fs.Dispose();
((IClientChannel)manager).Close();

_factory.Close();
}
MrYoung 2010-03-12
  • 打赏
  • 举报
回复
恩 我自己解决了 也差不多就是这个样子 事件通知更新进度条 事件通知下载完成执行操作
MrYoung 2010-03-11
  • 打赏
  • 举报
回复
有没有CS的例子呢
MrYoung 2010-03-11
  • 打赏
  • 举报
回复
能否具体一点 最好给个DEMO
wuyq11 2010-03-11
  • 打赏
  • 举报
回复
ftpwebrequest下载文件
或webrequest
webClient下载实现进度条

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧