Search code examples
vb.netwinformsfilestreamstreamwriter

StreamWriter text file gets created but contains no lines


I'm trying to write some text lines to a little log file in a Windows Form application and I cannot see why no lines are written. The file gets created OK and all of the following executes without error but when I open the new file with Notepad, there are no lines. Key snippets follow:

    Dim sFileName = App_Path() & "\logs\" & sJobName & ".log"
    Try
        Using fs As FileStream = New FileStream(sFileName, FileMode.Append, FileAccess.Write)
            Using w As StreamWriter = New StreamWriter(fs)
                Dim s As String = "Beginning execution (JobName=" & sJobName & ")"
                Log(s, w)
                s = "Connection in effect: " & BuildConnectString()
                Log(s, w)
                Dim loader As New Importer
                loader.LoadData(Me.txtFN.Text, w)
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

Public Sub Log(logMessage As String, w As StreamWriter)
    w.WriteLine("{0} {1}: {2}", DateTime.Now.ToLongTimeString(), _
        DateTime.Now.ToShortDateString(), logMessage)
End Sub

and then I'm trying to write to this log from a different class which has been passed the StreamWriter as a parameter:

Public Function LoadData(ByRef filename As String, _
                         ByRef w As StreamWriter) As String
    Dim s As String = "Test logging from loader class"
    Mainform.Log(s, w)

In this little test, I am expecting to see 3 lines but I'm getting nothing. I cannot see what I am doing wrong.


Solution

  • It works for me, but if the code doesn't work for you, you can use code like this ...

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim sFileName = App_Path() & "\logs\" & sJobName & ".log"
        Try
            Dim s As String = "Beginning execution (JobName=" & sJobName & ")"
            Log(s, sFileName)
            s = "Connection in effect: " & BuildConnectString()
            Log(s, sFileName)
            Dim loader As New Importer
            loader.LoadData(Me.txtFN.Text, sFileName)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    
    Public Sub Log(logMessage As String, StrPath As String)
        IO.File.AppendAllText(StrPath, String.Format("{0} {1}: {2}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToShortDateString(), logMessage) + vbCrLf)
    End Sub
    
    Public Function LoadData(ByRef filename As String, _
                         StrPath As String) As String
        Dim s As String = "Test logging from loader class"
        Log(s, StrPath)
    End Function