首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DownloadFileAsync:多个文件

DownloadFileAsync:多个文件
EN

Stack Overflow用户
提问于 2011-06-19 21:52:11
回答 2查看 2K关注 0票数 0

我在使用C# WebClient DownloadFileAsync时遇到了一些问题,希望您能帮助我。

这是我的场景:

我同时下载了许多文件(http://example.com/abc/1.jpghttp://example.com/abc/efg/2.jpg等)使用WebClient DownloadFileAsync。

我当前的示例代码是:

代码语言:javascript
复制
while (theres still files in http://example.com/abc/) {
    // filename will be something like /abc/1.jpg, /abc/efg/2.jpg
    if (!file.exists(directory.getcurrentdirectory()+filename.Replace('/', '\\'))) {
        WebClient webClient = new WebClient();
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloadProgressChanged);
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(downloadCompleted);
        webClient.DownloadFileAsync(new Uri("http://example.com"+filename), Directory.GetCurrentDirectory()+filename.Replace('/', '\\'));
    }

如何使下载的所有文件都显示在一个进度条中?

例如:1.jpg是50kb,2.jpg是50kb,当1.jpg完成下载时,进度条将显示50%,2.jpg将在进度条中显示51%到100%。

另外,如果文件名为/ abc /1.jpg,如果我的当前目录没有名为abc的文件夹,则下载将不起作用。如何让它根据文件名自动创建文件夹?(例如,/随机123/3.jpg、/另一个随机/4.jpg等)

EN

回答 2

Stack Overflow用户

发布于 2011-06-19 22:07:50

为了给出一个总体进度计数器,您将需要一个集中的例程,它收集每个正在进行的传输的迄今为止完成的数量和要下载的总量,并将它们相加以计算总的总量。因为传输是并行运行的,所以你不能给每个文件分配一个进度条的块(例如51-100%)。

对于大多数API,在向其中写入文件之前,您需要为自己创建文件夹。在开始写入文件之前,只需执行此操作即可在路径上创建所有缺少的文件夹:

代码语言:javascript
复制
Directory.CreateDirectory(Path.GetDirectoryName(filename));
票数 0
EN

Stack Overflow用户

发布于 2011-06-19 22:18:44

要实现进度条,您可以使用队列。下载完成后,更新进度条,然后开始下一次下载。但是,我不认为WebClient类可以告诉您下载完成了多少,只有它完成了还是没有完成。

要验证该目录是否存在,请使用:

代码语言:javascript
复制
if (!System.IO.Directory.Exists(folder_name)) System.IO.Directory.Create(folder_name);

您可以使用System.IO.Path类从路径中获取目录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6402744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档