2013-10-24 43 views
1

公司發佈文件並定期更新。如何查看遠程網絡服務器上的文件是否已更新?

例如, http://somecompany.com/blah/file.zip

我想每天輪詢一次以查看它是否已更新。

我猜我可以查看http頭來獲取文件大小,或者可能表示它已經改變的日期/校驗和。

我想知道是否有一個優雅的解決方案,在C#中執行此操作,而不是創建直接的TCP連接併發送一些命令。

任何想法?

+4

HTTP響應頭應該有一個名爲'Last-Modified'的字段,它包含GMT日期和時間值。 – Yuck

+1

創建TCP連接併發送一些命令是「解決方案」。 – Alexander

+0

謝謝,不知道是否有一個C#類已經像檢索文件一樣,可以抓取信息而不需要實際執行下載。 – NibblyPig

回答

5

由於該文件位於遠程Web服務器上,因此可以使用Last-Modified標題字段來標識文件是否有任何更改。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somecompany.com/blah/file.zip"); 
request.Method = "HEAD"; // Important - Not interested in file contents 

HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); 
Console.WriteLine(resp.LastModified); 

確保您使用HEAD作爲請求方法;由於GET會下載該文件。

+1

非常好,謝謝。這比我預期的要簡單得多。 – NibblyPig

0

在PCL中,您無法訪問完全.Net中的相同對象。所以這裏有一個比較靈活的代碼:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somecompany.com/blah/file.zip"); 
request.Method = "HEAD"; // Important - Not interested in file contents 
string lastModified = null; 
ManualResetEvent mre = new ManualResetEvent(false); 
var req = request.BeginGetResponse((result) => 
{ 
    var resp = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse; 
    lastModified = resp.Headers["Last-Modified"]; 
    mre.Set(); 
}, request); 
mre.WaitOne(); 
相關問題