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:'folder'file.png"
。如果您对当前目录的相对路径感到满意,只需将代码更改为webClient.DownloadFileAsync(uri2, directoryName + partPBSSurl);
甚至更好地使用System.Path.Combine(directoryName, partPBSSurl)
当然,您可以知道大小之前如果服务器支持。请参阅: 如何从 http 标头获取文件大小
我不想在空文件上浪费带宽或磁盘空间。
我不会担心的。性能下降可以忽略不计。
无需更改当前目录。 您已经在使用接受文件路径作为第二个参数的下载文件异步重载。
只需确保 partPBSSurl 包含目标文件的完整路径,包括目录和文件名。
关于您的第二个问题,即如果文件不存在,请避免浪费时间,碰巧我最近问了同样的问题:
使用网络客户端快速失败
最后,我最近扩展了 WebClient,以提供更简单的进度更改事件并允许更改超时。 我在这里提出了该代码:
https://stackoverflow.com/a/9763976/141172