如何用两个计数器为雷达、卫星两类文件生成独立编号文件名并修复下载问题
现有实现代码
int countRad = 0; int countSat = 0; private async Task DownloadAsync(WebClient Client) { for (int i = 0; i < urls.Count; i++) { stopwatch.Start(); string extractFile = textBoxSatelliteFolder.Text + "\\extractFile.txt"; string fNameRad = textBoxRadarFolder.Text + "\\radImage" + i + ".gif"; string fNameSat = textBoxSatelliteFolder.Text + "\\satImage" + i + ".gif"; if (urls[i] == "https://my.com/r/") { await Client.DownloadFileTaskAsync(new Uri(urls[i]), extractFile); } else { if (urls[i].Contains("Radar")) { await Client.DownloadFileTaskAsync(new Uri(urls[countRad]), fNameRad); countRad++; } else { await Client.DownloadFileTaskAsync(new Uri(urls[countSat]), fNameSat); countSat++; } } } }
现存问题
- countSat从0开始取值时会重复下载urls列表靠前的链接
- satImage的文件名编号会接续radImage的最后序号开始计数,例如雷达文件最后编号为21时,卫星文件从22、23开始编号
- 卫星分类的下载逻辑会错误下载雷达类gif文件
期望效果
无论urls列表中链接的排序如何,雷达类文件始终按radImage0.gif、radImage1.gif、radImage2.gif的规则命名,卫星类文件始终按satImage0.gif、satImage1.gif、satImage2.gif的规则独立编号命名,无重复下载、下载非对应分类文件的问题。
修复后代码
int countRad = 0; int countSat = 0; private async Task DownloadAsync(WebClient Client) { for (int i = 0; i < urls.Count; i++) { stopwatch.Start(); string currentUrl = urls[i]; if (currentUrl == "https://my.com/r/") { string extractFile = Path.Combine(textBoxSatelliteFolder.Text, "extractFile.txt"); await Client.DownloadFileTaskAsync(new Uri(currentUrl), extractFile); } else if (currentUrl.Contains("Radar")) { // 雷达文件使用独立计数器编号,下载当前遍历到的对应分类链接 string fNameRad = Path.Combine(textBoxRadarFolder.Text, $"radImage{countRad}.gif"); await Client.DownloadFileTaskAsync(new Uri(currentUrl), fNameRad); countRad++; } else { // 卫星文件使用独立计数器编号,下载当前遍历到的对应分类链接 string fNameSat = Path.Combine(textBoxSatelliteFolder.Text, $"satImage{countSat}.gif"); await Client.DownloadFileTaskAsync(new Uri(currentUrl), fNameSat); countSat++; } } }
修复说明
- 修正下载地址逻辑:原代码判断当前链接分类后,错误使用
urls[countRad]/urls[countSat]作为下载地址,改为直接使用当前遍历到的currentUrl,解决重复下载、下载非对应分类文件的问题 - 修正文件名编号逻辑:原代码使用全局循环变量
i拼接文件名,改为使用分类专属计数器countRad/countSat拼接文件名,实现两类文件独立从0开始编号的需求 - 优化路径拼接规则:将硬编码的
\\路径分隔符替换为Path.Combine方法,适配不同系统的路径格式要求,避免路径拼接错误
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

