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 ファイルを開いたままにしておくことが望ましいでしょうか、それともアプリケーションがクラッシュするのでしょうか?