Errorhandling

bastiglasl

Erfahrenes Mitglied
Mahlzeit!

Ich hab mir eine kleine function geschrieben, die exceptions abfangen und loggen soll. Ich hab nur ein Problem, wenn die Log-Datei noch nicht existiert und sie angelegt werden soll. Dabei bekomme ich immer den Fehler "Datei im Zugriff".
Ich poste euch einfach mal die Function und vielleicht kommt ihr drauf, was ich mit der Log-Datei falsch mache...

Code:
    Enum LoggingType As Integer     ' die versch. Loggingtypen
        Full = 2
        LoggingOnly = 1
        MessageOnly = 0
    End Enum                          

   Friend Function Errorhandling(ByVal sLogPfad As String, ByVal ex As Exception, ByVal sFenstertitel As String, _
         Optional ByVal oLoggingArt As LoggingType = LoggingType.Full, Optional ByVal sZusatzinfo As String = "")

        Dim srFehlerLog As System.IO.StreamWriter               ' Der Streamwriter für das Errorlogging

        If oLoggingArt <> LoggingType.LoggingOnly Then
            MessageBox.Show("Fehler bei " & ex.Source & ControlChars.NewLine & ex.Message & ControlChars.NewLine & _
            sZusatzinfo, sFenstertitel, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If

        If oLoggingArt > LoggingType.MessageOnly Then
            ' Wenn eine Log-Datei erzeugt werden soll

            If IO.File.Exists(sLogPfad) = False Then
                IO.File.Create(sLogPfad)
            End If
            Try
                srFehlerLog = New System.IO.StreamWriter(sLogPfad, True)
                srFehlerLog.AutoFlush = True
                srFehlerLog.WriteLine(Date.Now().ToString & "Fehler bei '" & sFenstertitel & "'")
                srFehlerLog.WriteLine(sZusatzinfo)
                srFehlerLog.WriteLine(ex.ToString)
                srFehlerLog.Close()
            Catch e As Exception
                Errorhandling("", e, "Fehlerlogging", LoggingType.MessageOnly)
            End Try
        End If
    End Function
 
Ganz einfach:

IO.File.Create(sLogPfad) liefert einen Stream zurück, den du nicht abfängst. Dieser muss zuerst geschlossen werden.
Code:
Dim fs as FileStream
fs = IO.File.Create(sLogPfad)
fs.Close()
 
Zurück