日志编写器未为每个条目创建新行

时间:2019-03-05 19:33:51

标签: vb.net file streamwriter

我觉得这确实很简单,但是我尝试过,我不知道我尝试过vbNewLineEnvironment.NewLinesMessage & vbNewLine (or Environment.Newline)的排列方式,还是我查看了这个网站上的多少个页面,或者通过Google查看了多少页面,但没有任何效果。

我什至尝试从属于我的VB.Net不和谐频道获得帮助,他们建议做与我相同的事情,并且该过程仍在上一个结尾处写入每个新的日志条目。一个连续的字符串。我的作家在下面。我想念一些简单的东西吗?

编辑:如果其他任何人遇到相同的问题,下面的代码将起作用。如果您想查看原始代码,则在编辑日志中。

Option Explicit On
Imports System.IO

Public Class WriteroLog
    Public Shared Sub LogPrint(sMessage As String)
        Dim AppPath As String = My.Application.Info.DirectoryPath

        If File.Exists($"{AppPath}\Log.txt") = True Then
            Try
                Using objWriter As StreamWriter = File.AppendText($"{AppPath}\Log.Txt")
                    objWriter.WriteLine($"{Format(Now, "dd-MMM-yyyy HH:mm:ss")} – {sMessage}")
                    objWriter.Close()
                End Using
            Catch ex As Exception
                MsgBox(ex)
                Return
            End Try
        Else
            Try
                Using objWriter As StreamWriter = File.CreateText($"{AppPath}\Log.Txt")
                    objWriter.WriteLine($"{Format(Now, "dd-MMM-yyyy HH:mm:ss")} – {sMessage}")
                    objWriter.Close()
                End Using

            Catch ex As Exception
                MsgBox(ex)
                Return
            End Try
        End If
    End Sub
End Class

3 个答案:

答案 0 :(得分:2)

File.AppendText()方法创建一个新的StreamWriter,然后将其用于将Text追加到指定的File。
请注意,在阅读有关此方法的文档时,您不需要验证文件是否已存在:如果不存在,则会自动创建文件。

作为旁注,在创建路径时,使用Path.Combine方法是一件好事:它可以防止路径定义中的错误并处理特定于平台的格式。

您的代码可以简化如下:

Public Shared Sub LogPrint(sMessage As String)
    Dim filePath As String = Path.Combine(Application.StartupPath, "Log.Txt")

    Try
        Using writer As StreamWriter = File.AppendText(filePath)
            writer.WriteLine($"{Date.Now.ToString("dd-MMM-yyyy HH:mm:ss")} – {sMessage}")
        End Using
    Catch ex As IOException
        MsgBox(ex)
    End Try
End Sub

答案 1 :(得分:1)

File.CreateText不会将结果分配给“ objWrite”,应该是:

objWriter = File.CreateText($"{AppPath}\Log.Txt")

不太确定这是否是问题的根源,但这是一个问题。

答案 2 :(得分:0)

本质上,您的逻辑是为此方法的每次调用重新打开或创建流“ objWriter”。我建议您将“ objWriter”初始化为Nothing,然后仅定义是否为Nothing。

设置为“无”,如下所示。

Shared objWriter As IO.StreamWriter = Nothing

然后添加“逻辑上无”的检查。