user9209064
user9209064

Reputation:

OpenFileDialog (Cancel/Close) File Not Found Crash

This is my code:

Private Sub HuraButton1_Click(sender As Object, e As EventArgs) Handles HuraButton1.Click
    Dim openFileDialog1 As New OpenFileDialog()
    openFileDialog1.FileName = "Select a Text File..."
    openFileDialog1.Filter = "Text Files (*.txt) | *txt"
    OpenFileDialog1.InitialDirectory = "C:\Users\Public\Desktop\"
    OpenFileDialog1.Title = "Select a Files"
    openFileDialog1.ShowDialog()

    Dim Findstring = IO.File.ReadAllText(openFileDialog1.FileName)
    Dim Lookfor As String = ""
    Dim result = openFileDialog1.ShowDialog()
    If openFileDialog1.FileName = Windows.Forms.DialogResult.Cancel Then
        MsgBox("File Not Found")
    End If
    If Findstring.Contains(Lookfor) Then
        MsgBox("Found")
    Else
        MsgBox("Not Found")
    End If

End Sub

Error:

System.IO.FileNotFoundException: The File'D:\1DesktopFILE\RobeVisualStudio\ShaadyyTool\bin\Debug\Select a Text File' Not Found.

I want to make sure that those who close the "OpenFileDialog1" The app doesn't crash. I Don't know why it doesn't work, Can you write the correct code thanks. Sorry for my eng.

Upvotes: 0

Views: 2000

Answers (4)

Nostromo
Nostromo

Reputation: 1264

Since the OpenFileDialog uses unmanaged code you really should put it in a Using block.

Using openFileDialog1 as OpenFileDialog = New OpenFileDialog
    openFileDialog1.Filter = "Text Files (*.txt) | *txt"
    ...
End Using

That way you can be sure that it is removed from memory completely, even if there is an exception inside the Using block.

Then you should give your OpenFileDialog an element to which it will open modally, otherwise it can happen that your OpenFileDialog vanishes in the background and your application seems unresponsive (because it waits for the OpenFileDialog to return but the user doesn't see that). Since you seem to be in a Form anyway, just do

openFileDialog1.ShowDialog(Me)

Then you should check for the return value of openFileDialog1.ShowDialog() and only proceed if there really has a file been selected.

If openFileDialog1.ShowDialog(Me) = DialogResult.Ok Then
    ...
End If

If the result of openFileDialog1.ShowDialog() is not DialogResult.Ok then openFileDialog1.FileName might be Nothing.

I hope this helps a little bit.

Upvotes: 0

Jack Gajanan
Jack Gajanan

Reputation: 1670

I think this is what you want

Private Sub HuraButton1_Click(sender As Object, e As EventArgs) Handles HuraButton1.Click
    Dim openFileDialog1 As New OpenFileDialog()
    openFileDialog1.Filter = "Text Files (*.txt) | *txt"
    openFileDialog1.InitialDirectory = "C:\Users\Public\Desktop\"
    openFileDialog1.Title = "Select a Files"
    openFileDialog1.CheckFileExists = True
    If openFileDialog1.ShowDialog() = DialogResult.OK Then
        'file selected now process it 
        Dim Findstring = IO.File.ReadAllText(openFileDialog1.FileName)
        Dim Lookfor As String = ""
        If Findstring.Contains(Lookfor) Then
            MsgBox("Found")
        Else
            MsgBox("Not Found")
        End If
    Else
        'file not selected or user cancelled 
        MsgBox("file not selected")
    End If
End Sub

Upvotes: 1

Ctznkane525
Ctznkane525

Reputation: 7465

You want to make some changes to this. Use the dialog result to determine if you should move forward. If they didn't select a file, don't do the code.

If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

    Dim Findstring as String = IO.File.ReadAllText(openFileDialog1.FileName)
    Dim Lookfor As String = ""

    If Findstring.Contains(Lookfor ) Then
        MsgBox("Found")
    Else
        MsgBox("Not Found")
    End If

End If

Upvotes: 0

Jay
Jay

Reputation: 53

openFileDialog1.FileName = "Select a Text File..."

i think you miss understood the above statement to set as a dialog box's title ...it is not what you think...rather it is used to find/select a file in the opened directory

Upvotes: 0

Related Questions