我在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文件,还是会导致应用程序崩溃?
答案 0 :(得分:0)
反过来说,应用程序试图访问该文件,而另一个程序正在使用它。
您需要在代码中进行错误处理,以便在无法打开文件时不会崩溃。在方法中的代码周围放置Try...Catch
,并处理您捕获的异常。
答案 1 :(得分:0)
我不认为保持日志打开应该是一个问题。有许多工具,如Textpad,它会在窗口出现时检查文件的状态,并给你一条消息说文件被更改,你想重新加载吗?
此问题可能特定于您用于打开日志文件的编辑器。