【问题标题】:Can't get checking if file exists using textboxes to work无法使用文本框检查文件是否存在
【发布时间】:2018-06-12 04:34:08
【问题描述】:

我已经为这段代码绞尽脑汁好几天了,但我似乎无法让它工作。我研究和研究没有运气。我的表单上有四个文本框。两个文本框是文件夹位置,另外两个文本框是文件位置。我正在尝试使用一个返回 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.net file-exists


    【解决方案1】:

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

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

    Re:更改是否设置了“检查”复选框不应执行检查本身 - 否则您只会在人们点击时检查。 (顺便说一句,我猜你会收到两次消息,因为其他地方的代码勾选/取消勾选此复选框,但这只是一个猜测)。

    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
    

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 2023-01-20
      • 2021-05-25
      • 2021-12-28
      • 2017-04-21
      • 2011-09-12
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多