3

我知道关于如何使用 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);
                //}
            }
4

2 回答 2

1

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

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

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

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

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

于 2012-08-07T04:02:22.260 回答
0

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

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

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

使用 WebClient 快速失败

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

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

于 2012-08-07T03:55:54.020 回答