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