检查文件是否在线存在的最快捷最简单的方法是什么?

时间:2013-01-25 14:50:40

标签: vb.net

检查文件是否在线存在的最快捷,最简单的方法是什么?

我知道如何检查我的文件系统中是否存在文件,或者网站是否存在,但我不知道如何检查文件是否存在于联机状态。我该怎么做?

我想在线验证下面的链接:

http://ccc-itgs2012.wikispaces.com/file/view/AP+Human+Geography+Gapminder.flv

4 个答案:

答案 0 :(得分:1)

您以与检查文件系统相同的方式在线检查:尝试访问该文件,并在尝试失败时处理异常(顺便说一下:如果您在文件系统上使用File.Exists(),那么'可能doing it wrong)。

唯一的另一个问题是,在线检查时,您可以发送资源的http请求并访问响应流而无需实际读取流,这意味着您不必将整个文件下载到知道请求将完成。

答案 1 :(得分:1)

对于HTTP,请使用HTTP HEAD方法。它的行为类似于GET方法,只是它只返回内容标题。如果该文件不存在,则服务器应返回404状态代码。否则,您可以假设该文件存在(甚至从内容标题中获取其大小)。

修改

您可以使用此代码:

Public Function ResourceExists(location As Uri) As Boolean
    If (Not String.Equals(location.Scheme, Uri.UriSchemeHttp, StringComparison.InvariantCultureIgnoreCase)) And (Not String.Equals(location.Scheme, Uri.UriSchemeHttps, StringComparison.InvariantCultureIgnoreCase)) Then
        Throw New NotSupportedException("URI scheme is not supported")
    End If

    Dim request = Net.WebRequest.Create(location)
    request.Method = "HEAD"

    Try
        Using response = request.GetResponse
            Return DirectCast(response, Net.HttpWebResponse).StatusCode = Net.HttpStatusCode.OK
        End Using
    Catch ex As Net.WebException
        Select Case DirectCast(ex.Response, Net.HttpWebResponse).StatusCode
            Case Net.HttpStatusCode.NotFound
                Return False
            Case Else
                Throw
        End Select
    End Try
End Function

用法:

Dim itExists As Boolean = ResourceExists(New Uri("http://ccc-itgs2012.wikispaces.com/file/view/AP+Human+Geography+Gapminder.flv"))

这会锁定调用者的线程,因此您可能希望将其重构为异步方法。

答案 2 :(得分:0)

此代码适用于我

Public Function CheckAddress(ByVal URL As String) As Boolean
    Try
        Dim request As WebRequest = WebRequest.Create(URL)
        Dim response As WebResponse = request.GetResponse()
    Catch ex As Exception
        Return False
    End Try
    Return True
End Function

答案 3 :(得分:0)

我提出的最佳方式,实际上发现它按预期工作,因为所有方法只是检查域是否找到,所以如果找到域而文件不是,它将仍告诉你文件已找到,我的方法是尝试使用 DownloadFileAsync 下载该文件并运行一个计时器3秒钟,然后在3秒后检查是否有任何字节下载从该文件,如果是这样,然后通过该链接找到该文件,如果没有,则找不到它,然后您可以取消下载并删除在您的PC上创建的文件。

这是我的代码:

Imports System.IO
Imports System.Net
Public Class Form1
    Dim BytesReceived As Integer

    Public WithEvents Download As WebClient

    Private Sub DownloadBUT_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Download = New WebClient
        Download.DownloadFileAsync(New Uri("http://example.com/FileName.exe"), My.Computer.FileSystem.SpecialDirectories.Desktop & "FileName.exe")
        CheckFileTimer.Start()
        DownloadBUT.Enabled = False
    End Sub

    Private Sub Download_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles Download.DownloadProgressChanged
        BytesReceived = e.BytesReceived
    End Sub

    Private Sub CheckFileTimer_Tick(sender As Object, e As EventArgs) Handles CheckFileTimer.Tick
        CheckFileTimer.Stop()
        If BytesReceived = 0 Then
            MsgBox("File not found!")
        Else
            MsgBox("File found!")
        End If
        DownloadBUT.Enabled = True
        Download.CancelAsync()
        Try
            File.Delete(My.Computer.FileSystem.SpecialDirectories.Desktop & "FileName.exe")
        Catch ex As Exception : End Try
    End Sub
End Class

希望这对您有用:)