0

我在 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 文件,否则会导致应用程序崩溃吗?

4

2 回答 2

0

相反,应用程序正在尝试访问该文件,而另一个程序正在使用它。

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

于 2012-12-19T11:17:52.183 回答
0

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

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

于 2012-12-19T11:20:38.017 回答