0

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

这是我的场景:

我正在使用 WebClient 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 等)

4

2 回答 2

0

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

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

Directory.CreateDirectory(Path.GetDirectoryName(filename));
于 2011-06-19T14:07:49.520 回答
0

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

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

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

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

于 2011-06-19T14:18:43.777 回答