C# 下载一系列文件

本文关键字:文件 一系列 下载 | 更新日期: 2024-11-08 19:10:18

我知道关于如何使用WebClient下载文件已经提出了一些类似的问题。 我可以完美地下载单个文件,但我想下载一系列文件。 从 1-6000 个文件不等。 我可以将它们下载到我当前的目录中,但是我不知道如何根据下载它们的位置将它们下载到不同的目录。 在下载它们之前,我是否需要临时更改当前工作目录?

稍微在同一主题上,我坚持如何在下载文件之前验证文件是否存在。 我不想在空文件上浪费带宽或磁盘空间。 这是我到目前为止所拥有的:

            for (int x = 1; x <= 6000; x++)
            {
                pbsscount = x.ToString();
                // Used for downloading file
                string directoryName = textBox1.Text.ToString().Replace(":", "_");
                if (!Directory.Exists(textBox1.Text))
                    Directory.CreateDirectory(directoryName.Substring(7));
                string wholePBSSurl = textBox1.Text + "/" + "pb" + pbsscount.PadLeft(6, '0') + ".png";
                // Used for saving file, file name in directory
                string partPBSSurl = "pb" + pbsscount.PadLeft(6, '0') + ".png";
                Uri uri2 = new Uri(wholePBSSurl);
                //if (fileExists(wholePBSSurl))
                //{
                    // Initialize downloading info, grab progressbar info
                    WebClient webClient = new WebClient();
                    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                    // Save file to folder
                    //webClient.DownloadFileAsync(uri2, textBox1.Text + "/" + partPBSSurl);
                    webClient.DownloadFileAsync(uri2, partPBSSurl);
                //}
            }

C# 下载一系列文件

在下载它们之前,我是否需要临时更改当前工作目录?

第二个参数可以是完整路径@"C:'folder'file.png"。如果您对当前目录的相对路径感到满意,只需将代码更改为webClient.DownloadFileAsync(uri2, directoryName + partPBSSurl);甚至更好地使用System.Path.Combine(directoryName, partPBSSurl)

当然,您可以知道大小之前如果服务器支持。请参阅: 如何从 http 标头获取文件大小

我不想在空文件上浪费带宽或磁盘空间。

我不会担心的。性能下降可以忽略不计。

无需更改当前目录。 您已经在使用接受文件路径作为第二个参数的下载文件异步重载。

只需确保 partPBSSurl 包含目标文件的完整路径,包括目录和文件名。

关于您的第二个问题,即如果文件不存在,请避免浪费时间,碰巧我最近问了同样的问题:

使用网络客户端快速失败

最后,我最近扩展了 WebClient,以提供更简单的进度更改事件并允许更改超时。 我在这里提出了该代码:

https://stackoverflow.com/a/9763976/141172