我想知道远程文件的最后修改日期(通过网址定义)。
只有下载它,如果它比我本地存储的更新。
我设法为本地文件执行此操作,但找不到为远程文件执行此操作的解决方案(无需下载)
工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("C:/test.txt")
MsgBox("File was last modified on " & infoReader.LastWriteTime)
不工作:
Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo("http://google.com/robots.txt")
MsgBox("File was last modified on " & infoReader.LastWriteTime)
我希望有一个只需要下载文件标题的解决方案
答案 0 :(得分:3)
您可以使用System.Net.Http.HttpClient
类从服务器获取上次修改日期。由于它发送HEAD
请求,因此无法获取文件内容:
Dim client = New HttpClient()
Dim msg = New HttpRequestMessage(HttpMethod.Head, "http://google.com/robots.txt")
Dim resp = client.SendAsync(msg).Result
Dim lastMod = resp.Content.Headers.LastModified
您还可以将If-Modified-Since
请求标头与GET
请求一起使用。这样,如果文件尚未更改(未发送文件内容),则响应应为304 - Not Modified
;如果文件已更改,则响应应为200 - OK
(并且响应中将发送文件内容),虽然服务器不需要遵守此标题。
Dim client = New HttpClient()
Dim msg = New HttpRequestMessage(HttpMethod.Get, "http://google.com/robots.txt")
msg.Headers.IfModifiedSince = DateTimeOffset.UtcNow.AddDays(-1) ' use the date of your copy of the file
Dim resp = client.SendAsync(msg).Result
Select Case resp.StatusCode
Case HttpStatusCode.NotModified
' Your copy is up-to-date
Case HttpStatusCode.OK
' Your copy is out of date, so save it
File.WriteAllBytes("C:\robots.txt", resp.Content.ReadAsByteArrayAsync.Result)
End Select
请注意使用.Result
,因为我在控制台应用程序中进行测试 - 您应该await
代替。
答案 1 :(得分:1)
如果服务器提供,您可以通过HTTP header Last-Modified property获取它。但你仍然坚持下载完整的文件。
你可以通过FTP获得它 查看服务器是否允许您查看文件夹中的文件列表 如果网站提供的日期可以通过屏幕报废。
答案 2 :(得分:1)
我知道这是一个有点老问题但是,还有更好的答案。
Dim req As WebRequest = HttpWebRequest.Create("someurl")
req.Method = "HEAD"
Dim resp As WebResponse = req.GetResponse()
Dim remoteFileLastModified As String = resp.Headers.Get("Last-Modified")
Dim remoteFileLastModifiedDateTime As DateTime
If DateTime.TryParse(remoteFileLastModified, remoteFileLastModifiedDateTime) Then
MsgBox("Date Last Modified:" + remoteFileLastModifiedDateTime.ToString("d MMMM yyyy dddd HH:mm:ss"))
Else
MsgBox("could not determine")
End If