2011-06-19 39 views
0

我遇到了一些问题,使用C#WebClient DownloadFileAsync,并希望你能帮助我。DownloadFileAsync:多个文件

这里是我的情况:

我下载多个文件同时采用Web客户端DownloadFileAsync同一时间(http://example.com/abc/1.jpg,http://example.com/abc/efg/2.jpg等)。

我当前的示例代码:

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的文件夹,则下载将不起作用。如何根据文件名自动创建文件夹? (例如/random123/3.jpg,/anotherrandom/4.jpg等)

+0

你在问两个不相关的东西,你应该问两个问题。 – svick

+0

在开始下载之前,你知道所有图像的大小吗?还是应该进度条独立于图像的大小? – svick

+0

在开始下载之前,我不知道所有图像的总大小。它应该是动态的。 – initialshl

回答

0

为了给你一个总体进度计数器,你需要一个集中式的例程,它收集已完成的数量和总数,对每个正在进行的转账进行下载金额并将它们相加以计算总计。由于传输并行运行,因此您不能只将进度条块(例如51-100%)分配给每个文件。

对于大多数API,在将文件写入文件之前,您需要为自己创建文件夹。只需要在开始写入文件之前创建路径上所有丢失的文件夹:

Directory.CreateDirectory(Path.GetDirectoryName(filename)); 
+0

谢谢!目录创建现在可行!有什么方法可以收集所有将要下载的文件的总大小,并自己计算出百分比,并将其合并到一个进度条中? – initialshl

+0

您可以帮助我完成下载文件的完成数量吗?我能够从PHP下载文件的总大小,但我不知道如何计算进度条。 – initialshl

0

要做进度条的事情,您可以使用队列。下载完成后,更新进度条并开始下一次下载。 但是,我不认为WebClient类可以告诉你有多少下载完成,只有当它完成或没有完成。

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

if (!System.IO.Directory.Exists(folder_name)) System.IO.Directory.Create(folder_name); 

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