使用C#和RegEx下载变量FileNames

时间:2013-02-05 01:04:00

标签: c# regex webclient

我在我大学的电脑维修部门工作。部门,我们的主要职能是从学生的个人电脑中删除病毒。为此,我们需要各种病毒清除工具的最新版本(例如Kaspersky Virus Removal Tool和Malwarebytes Antimalware)。所以我写了一个C#程序来为我们下载这些文件。我并不过分担心下载文件的实际行为;那已经很多了(我只是使用WebClient类的DownloadFile方法)。我遇到的问题是,由于包括上次更新的日期和/或程序的版本号,一些文件名会随着时间的推移而发生变化。例如,卡巴斯基病毒清除工具的当前下载链接是“http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/setup_11.0.0.1245.x01_2013_01_29_22_08.exe”,但明天它可能是“http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/setup_11.0.0.1368.x01_2013_02_05_22_08.exe”。我想到的第一个解决方案就是使用正则表达式......问题在于我之前从未真正使用过RegEx,所以我不完全确定如何在这种情况下实现它们,而且我还没有没有找到任何类似问题的参考。

使用该程序的当前设置,我必须更改已更新的任何文件的下载URL。理想情况下,我希望我的程序能够自动获取这些病毒清除工具的最新版本,以便我们可以设置每晚运行的计划任务。

任何有助于解决我的这个问题的帮助都将非常感激...我已经在几个月内思考这个特殊问题了。

1 个答案:

答案 0 :(得分:2)

它比这更容易,它们命名文件的方式意味着如果你进行字符串比较,那么更大的名字将是最新的。

仅供参考,以获取最新的文件名...

var client = new WebClient();
var r = new Regex("setup(.*?)exe");
var matches =
  r.Matches(client.DownloadString(@"http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/"));
var latest = matches.Cast<object>().ToList()
             .Select(o => o.ToString())
             .OrderByDescending(s => s)
             .FirstOrDefault();