2015-03-31 45 views
0

我想寫一些文本行到Windows窗體應用程序中的一個小日誌文件,我看不出爲什麼沒有寫入行。該文件得到創建好,並且以下所有執行沒有錯誤,但是當我用記事本打開新文件時,沒有行。重點摘錄如下:StreamWriter文本文件被創建,但不包含行

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 

,然後我試圖從已通過的StreamWriter作爲參數不同的類寫這篇日誌:

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) 

在這個小測試,我期待看到3條線,但我什麼都沒有。我看不到我做錯了什麼。

+0

此代碼對我的作品。可能是代碼中有其他東西(你沒有在這裏提到過)是在創建這個問題。 – 2015-04-01 08:48:01

回答

1

它爲我,但如果代碼不爲你工作,你可以使用這樣的代碼......

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 
+0

謝謝!我很好奇你的意思是「爲我工作......」。您是否在使用USING語句爲您正常工作的原始文章中說我的代碼?我一行一行地調試所有代碼,並且它沒有錯誤地執行,但是.log文件中沒有行。 – 2015-04-01 16:31:07

+0

我試過你的代碼,它「爲我工作」,但我有2個問題。 AppendAllText的文檔聲明它「打開一個文件,將指定的字符串追加到文件中,然後關閉文件,如果該文件不存在,該方法創建一個文件,將指定的字符串寫入文件,然後關閉文件。」。我希望能夠根據需要逐一寫一行,而不必關閉和重新打開文件。其次,我需要將每個傳遞給Log子句的字符串作爲單獨的一行書寫(即僅附加到文件本身 - 不附加到前一行的內容中)。 – 2015-04-01 16:36:36

+0

是的,我的意思是說你的代碼正在工作,我看到了三行文本,但我不明白你的問題,你可以編寫整個LoadData函數嗎? – 2015-04-01 17:15:02