0

Full code at bottom.

I've been getting an ArgumentException: "Illegal characters in path" whenever I attempt to save my text file in the program I've created.

My thoughts are that it has something to do with the directory path(path is chosen by user when prompted to open the file using an inputbox). My path on my computer being:

C:\Users\User\Desktop\HighScoreEditor

I've read tab characters can be the cause of this exception so my thoughts were maybe it's caused by the "\" in the directory path. I'm a 2nd year University Student so I may be completely wrong.

What I'm looking for is how to ignore this exception so that my file is saved, or a way to fix it so this exception does not occur.

My file is read from a directory path input by the user during an inputbox:

Dim message, title, defaultValue As String
Dim myValue As Object
Dim inFile As StreamReader
Dim strLine As String

' Set prompt.
message = "Enter a directory path to open your HighScore List."

' Set title.
title = "Which HighScore List should I open?"
defaultValue = ""   ' Set default value.

' Display message, title, and default value.
myValue = InputBox(message, title, defaultValue)

' If user has clicked Cancel. 
If myValue Is "" Then
    Exit Sub
End If

Try
    If File.Exists(myValue) = False Then
        MessageBox.Show("Error: File/Directory Path """ & myValue & """ does not exist.")
    ElseIf File.Exists(myValue) = True Then
        inFile = File.OpenText(myValue)

        Do While inFile.Peek <> -1
            strLine = inFile.ReadLine()
            txtScores.Text = txtScores.Text & vbCrLf & strLine
        Loop

        ' Close the file.
        inFile.Close()

    End If
Catch ex As Exception
    MessageBox.Show("Error: File/Directory Path """ & myValue & """ was found, however could not be opened." & vbCrLf & "" & vbCrLf & "Please make sure the list has a .txt file extension.")
End Try

Here is my code for my StreamWriter and save button:

Private Sub mnuFile_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFile_Save.Click
        Dim outFile As StreamWriter

        outFile = File.CreateText(txtScores.Text)

        outFile.WriteLine(txtScores.Text)

        outFile.Close()

    End Sub

------FULL CODE BELOW------

Imports System.IO

Public Class frmHighScore_Editor

    Dim strTxt As String = "Click File > Open to display your HighScore List Here."

    Private Sub mnuFile_Exit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFile_Exit.Click
        ' Terminates the program.
        Me.Close()
    End Sub

    Private Sub mnuFile_Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFile_Open.Click
        Dim frmContinue As New frmContinue
        frmContinue.ShowDialog()

        Dim message, title, defaultValue As String
        Dim myValue As Object
        Dim inFile As StreamReader
        Dim strLine As String

        ' Set prompt.
        message = "Enter a directory path to open your HighScore List."

        ' Set title.
        title = "Which HighScore List should I open?"
        defaultValue = ""   ' Set default value.

        ' Display message, title, and default value.
        myValue = InputBox(message, title, defaultValue)

        ' If user has clicked Cancel. 
        If myValue Is "" Then
            Exit Sub
        End If

        txtScores.Text = String.Empty

        Try
            If File.Exists(myValue) = False Then
                txtScores.Text = strTxt
                MessageBox.Show("Error: File/Directory Path """ & myValue & """ does not exist.")

            ElseIf File.Exists(myValue) = True Then

                txtScores.Text = String.Empty

                If myValue.Contains("Blackjack.txt") Then
                    pbGame_Photo.Image = HighScores.My.Resources.Blackjack
                    lblGameName_Output.Text = "Blackjack"
                ElseIf myValue.Contains("Mahjong.txt") Then
                    pbGame_Photo.Image = HighScores.My.Resources.Mahjong
                    lblGameName_Output.Text = "Mahjong"
                ElseIf myValue.Contains("Minesweeper.txt") Then
                    pbGame_Photo.Image = HighScores.My.Resources.Minesweeper
                    lblGameName_Output.Text = "MineSweeper"
                ElseIf myValue.Contains("Pinball.txt") Then
                    pbGame_Photo.Image = HighScores.My.Resources.Pinball
                    lblGameName_Output.Text = "Pinball"
                ElseIf myValue.Contains("Solitaire.txt") Then
                    pbGame_Photo.Image = HighScores.My.Resources.Solitaire
                    lblGameName_Output.Text = "Solitaire"
                Else
                    pbGame_Photo.Image = HighScores.My.Resources.Blank
                    lblGameName_Output.Text = "Your Game"
                End If

                inFile = File.OpenText(myValue)

                Do While inFile.Peek <> -1
                    strLine = inFile.ReadLine()

                    Dim Res As String = ""
                    Dim Array(0) As Integer

                    For Each c As Char In strLine
                        If IsNumeric(c) Then
                            Res = Res & c

                            If CInt(Res) > Array(0) Then
                                Array(0) = CInt(Res)

                            End If

                        End If
                    Next
                    txtScores.Text = txtScores.Text & vbCrLf & strLine

                    lblScoreAchieved_Output.Text = Array(0)

                Loop

                ' Close the file.
                inFile.Close()

                txtScores.Enabled = True

                End If
        Catch ex As Exception
            txtScores.Text = strTxt
            MessageBox.Show("Error: File/Directory Path """ & myValue & """ was found, however could not be opened." & vbCrLf & "" & vbCrLf & "Please make sure the list has a .txt file extension.")
        End Try
    End Sub

    Private Sub frmHighScore_Editor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the focus.
        gbGameInfo.Focus()

        pbGame_Photo.Image = HighScores.My.Resources.Blank

        ' Disable text box on load since it's empty anyways.
        txtScores.Enabled = False
        txtScores.Text = strTxt
    End Sub

    Private Sub mnuFile_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFile_Save.Click
        Dim outFile As StreamWriter

        outFile = File.CreateText(txtScores.Text)

        outFile.WriteLine(txtScores.Text)

        outFile.Close()

    End Sub
End Class

------FULL CODE ABOVE------

rene
  • 41,474
  • 78
  • 114
  • 152
Robert Montz
  • 163
  • 1
  • 1
  • 9

1 Answers1

1
  myValue = InputBox(message, title, defaultValue)

That's a very poor way to ask for a filename. Use SaveFileDialog instead. Short from the intuitive dialog that any Windows user knows how to operate, it also automatically avoids that exception.

Hans Passant
  • 922,412
  • 146
  • 1,693
  • 2,536
  • I'm having a difficult time incorporating SaveFileDialog on my Save and SaveAs without having to change the way my File is opened and displayed into the textbox. – Robert Montz Nov 17 '13 at 20:27
  • Well sure, making drastic changes in UI using classes you've never used before is expected to take more than an hour. Not so sure why SaveFileDialog is a problem when you open a file, be sure to use OpenFileDialog instead. – Hans Passant Nov 17 '13 at 20:45