2013-02-05 16 views
1

我爲我的大學I.T.的計算機修復分支工作。部門,我們的主要職能是從學生的個人電腦中刪除病毒。爲此,我們需要各種病毒清除工具的最新版本(如卡巴斯基病毒刪除工具和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,所以我不完全確定如何將它們實現到這種特定情況中,而我沒有沒有發現任何類似的問題。用C#和正則表達式下載變量FileNames

隨着程序的當前設置,我必須去更改任何已更新文件的下載url。理想情況下,我希望我的程序能夠自動獲取這些病毒清除工具的最新版本,以便我們可以設置每天晚上運行的計劃任務。

任何幫助解決我的這個問題將不勝感激...我一直在思考這個特定問題幾個月了。

+0

必須有固定的客源,甚至是重定向一個鏈接到最新版本! –

+2

感謝您與我們分享您的生活故事。你的問題歸結爲:如果我不知道URL,我該如何下載文件?答案:下載一個你知道的URL,其中包含你想要下載的文件的鏈接。 – dtb

+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();