复制日志文件时应用程序崩溃

时间:2012-12-19 11:11:13

标签: .net logging

我在Visual Basic中编写了一个小应用程序(但我描述的问题可能适用于任何语言)并且我的日志文件出现问题。

如果我在应用程序运行时尝试复制应用程序日志文件(整个时间都在写日志文件),则应用程序崩溃。

看起来系统正在尝试访问应用程序正在使用的文件。

目前,当我想记录消息时,我打开文件(首先检查它是否存在,如果不存在则创建它),然后写入,最后关闭文件。

这实际上就是代码:

Public Shared Sub WriteToLog(ByVal msg As String)
        Dim logID As Integer = 0
        Dim fileName As String = Application.StartupPath & "/log.log"
        'Check the file
        If My.Computer.FileSystem.FileExists(fileName) Then
            'Get ID of log entry
            Dim str As String = My.Computer.FileSystem.ReadAllText(fileName)
            Dim array() As String = Split(str, vbCrLf)
            logID = array.Length - 1
        Else
            'Create if it does not exist
            Dim fs As FileStream = New FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)
            Dim s As StreamWriter = New StreamWriter(fs)
            'Write header:
            s.Write("LOGID;TIME;CLASSIFICATION;INFO" & vbCrLf)
            s.Close()
            fs.Close()
            logID = 1
        End If

        'Log it
        Dim fs1 As FileStream = New FileStream(fileName, FileMode.Append, FileAccess.Write)
        Dim s1 As StreamWriter = New StreamWriter(fs1)
        s1.Write(logID & ";" & DateTime.Now.ToString() & ";" & msg & vbCrLf)
        s1.Close()
        fs1.Close()

    End Sub

我的疑问是:最好是在应用程序运行时始终打开lof文件,还是会导致应用程序崩溃?

2 个答案:

答案 0 :(得分:0)

反过来说,应用程序试图访问该文件,而另一个程序正在使用它。

您需要在代码中进行错误处理,以便在无法打开文件时不会崩溃。在方法中的代码周围放置Try...Catch,并处理您捕获的异常。

答案 1 :(得分:0)

我不认为保持日志打开应该是一个问题。有许多工具,如Textpad,它会在窗口出现时检查文件的状态,并给你一条消息说文件被更改,你想重新加载吗?

此问题可能特定于您用于打开日志文件的编辑器。

相关问题