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

ログを開いたままにしておくことは問題ではないと思います。ウィンドウが表示されたときにファイルの状態をチェックし、ファイルが変更されたことを通知するメッセージを返すTextpadのような多くのツールがあります。リロードしますか?

この問題は、ログファイルを開くために使用したエディタに固有のものである可能性があります。

于 2012-12-19T11:20:38.017 に答える
0

逆に、別のプログラムがファイルを使用しているときに、アプリケーションがファイルにアクセスしようとしています。

ファイルを開くことができなかった場合にクラッシュしないように、コードでエラー処理が必要です。Try...Catchメソッド内のコードを囲み、キャッチした例外を処理します。

于 2012-12-19T11:17:52.183 に答える