无法使用文本框检查文件是否存在

Can't get checking if file exists using textboxes to work

几天来我一直在为这段代码绞尽脑汁,但我似乎无法让它工作。我已经研究和研究没有运气。我的表单上有四个文本框。两个文本框是文件夹位置,另外两个文本框是文件位置。我正在尝试使用一个函数,该函数将 return true 或 false 判断两个文本框中的文件是否存在。我没有发现这段代码有任何问题,它就是行不通!我确定这是我忽略的简单事情。也许其他人可以发现它!

Private Function doesFileExist(folderPath, fileName) As Boolean
    If IO.File.Exists(folderPath & "\" & fileName) Then
        Return True
    Else
        Return False
    End If
End Function

Private Sub chkStart_CheckedChanged(sender As Object, e As EventArgs) Handles chkStart.CheckedChanged
    If doesFileExist(txtCPU.Text, txtFileCPU.Text) And
        doesFileExist(txtGPU.Text, txtFileGPU.Text) Then
        If chkStart.Checked Then
            chkStart.Text = "Stop Monitor"
        Else
            chkStart.Checked = False
            chkStart.Text = "Start Monitor"
        End If
    Else
        chkStart.Checked = False
        MessageBox.Show("Please check directory & file locations!", "Error!", MessageBoxButtons.OK)
        End if
End Sub

我想提一下,在我尝试嵌套 if 语句之前,我也尝试像这样将它们分开..

Private Sub chkStart_CheckedChanged(sender As Object, e As EventArgs) Handles chkStart.CheckedChanged
    If Not doesFileExist(txtCPU.Text, txtFileCPU.Text) And
       Not doesFileExist(txtGPU.Text, txtFileGPU.Text) Then
        chkStart.Checked = False
        MessageBox.Show("Please check directory & file locations!", "Error!", MessageBoxButtons.OK)
        Exit Sub
    End If

    If chkStart.Checked Then
        chkStart.Text = "Stop Monitor"
    Else
        chkStart.Checked = False
        chkStart.Text = "Start Monitor"
    End If
End Sub

如果应用程序 运行 在启动时勾选了复选框,这两种方式都会显示消息框。它不仅会显示消息框,还会显示消息框两次!我还没弄明白!

你的检查文件存在可以被简化...(我已经有一段时间没有使用 VB 所以对于任何语法错误深表歉意,我手头没有 IDE)

Function DoesFileExist(Folder as String, Filename As String) As Boolean
    Return IO.File.Exists(IO.Path.Combine(Folder, Filename))
End Function

回复:更改是否设置了 "check" 复选框不应自行执行检查 - 否则您只会在人们点击时检查。 (顺便说一下,我猜你收到的消息是其他地方 ticks/unticks 这个复选框的代码的两倍,但这只是一个猜测)。

Private Sub chkStart_CheckedChanged(sender As Object, e As EventArgs) Handles chkStart.CheckedChanged
    If chkStart.Checked Then
        chkStart.Text = "Stop Monitor"
        PollTimer.Start()
    Else
        chkStart.Text = "Start Monitor"
        PollTimer.Stop()
    End if
End Sub

最后...您需要定义何时进行检查。理想情况下,您会希望使用 FileSystemWatcher,它会在文件系统更改时为您提供事件,但您也可以使用计时器进行轮询...

Private PollTimer As System.Timers.Timer

然后在您的 Form Main 中,进行一些初始计时器设置...

...
PollTimer = New System.Timers.Timer()
PollTimer.Interval = 30000 ' Seconds
AddHandler PollTimer.Elapsed, AddressOf CheckExistsNow
PollTimer.Start()
...

最后是 运行 每次我们要进行检查时的代码....

Sub CheckExistsNow(sender As Object, e As System.Timers.ElapsedEventArgs)
    If Not DoesFileExist(txtGPU.Text, txtFileGPU.Text) Then
        ' Handle the missing file.
    End if
End Sub