公司發佈文件並定期更新。如何查看遠程網絡服務器上的文件是否已更新?
例如, http://somecompany.com/blah/file.zip
我想每天輪詢一次以查看它是否已更新。
我猜我可以查看http頭來獲取文件大小,或者可能表示它已經改變的日期/校驗和。
我想知道是否有一個優雅的解決方案,在C#中執行此操作,而不是創建直接的TCP連接併發送一些命令。
任何想法?
公司發佈文件並定期更新。如何查看遠程網絡服務器上的文件是否已更新?
例如, http://somecompany.com/blah/file.zip
我想每天輪詢一次以查看它是否已更新。
我猜我可以查看http頭來獲取文件大小,或者可能表示它已經改變的日期/校驗和。
我想知道是否有一個優雅的解決方案,在C#中執行此操作,而不是創建直接的TCP連接併發送一些命令。
任何想法?
由於該文件位於遠程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
會下載該文件。
非常好,謝謝。這比我預期的要簡單得多。 – NibblyPig
在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();
HTTP響應頭應該有一個名爲'Last-Modified'的字段,它包含GMT日期和時間值。 – Yuck
創建TCP連接併發送一些命令是「解決方案」。 – Alexander
謝謝,不知道是否有一個C#類已經像檢索文件一樣,可以抓取信息而不需要實際執行下載。 – NibblyPig