Hej igen! Hej, Jesus ! så mycket kod för en så enkel sak. SvenPon, Tack Johan, jag ska ta o testa det nu =) writeLocalLog fungerar hur fint som helst, tack! Hej,Hur kan man skapa och redigera en txt fil på VB?
Jag har en program som loggar fel, tanken var först att kunna logga felmeddelande i XML filer men det verkar vara lite klydd så jag tänkte logga felmeddelande i en txt fil istället.
Den ska se ut följande:
[Datum][Felmeddelande]
Varje gång ett fel inträffar så ska filen se ut så efter loggandet:
20050201 10:23:22 inget internet förbindelse
20050202 10:23:20 inget internet förbindelse
.
.
.
Frågan är nu: Hur skapar man ett txt fil? Hur kan man öppna txt filen och redigera det?
MVH
TonySv: Hur kan man skapa och redigera en txt fil på VB?
Bifogar en liten klass som jag brukar använda. Finns säkert synpunkter men denna funkar för mig. t.ex. en sak man skulle ändra är att köra med FreeFile istället för fasta filnummer. Det finns andra förbättringsförslag om man har lite tid över... :-)
<code>
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" ( _
ByVal lpBuffer As String, _
nSize As Long _
) As Long
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" ( _
ByVal lpBuffer As String, _
nSize As Long _
) As Long
Public Function DumpError( _
ByVal GlobalPath As String, _
ByVal sError As String, _
ByVal sSource As String _
) As Boolean
Dim sComputerName As String
Dim sUserName As String
Dim sPrefix As String
Dim bOK As Boolean
Dim sLogText As String
'Prepare execution
On Error GoTo Err_DE
bOK = True
'Prepare global prefix data
'-- Computer name
sComputerName = Space$(255)
GetComputerName sComputerName, 254
sComputerName = Trim$(sComputerName)
sComputerName = Replace$(sComputerName, Chr$(0), "")
'-- User name
sUserName = Space$(255)
GetUserName sUserName, 254
sUserName = Trim$(sUserName)
sUserName = Replace$(sUserName, Chr$(0), "")
'-- And compile the full string
sPrefix = Format$(Now, "HH:MM:SS") & _
" [" & App.EXEName & " v. " & App.Major & "." & App.Minor & "." & App.Revision & "]" & _
" <" & sUserName & "@" & sComputerName & ">" & _
" (" & App.hInstance & ":" & App.ThreadID & ")" & _
" "
'Write log
sLogText = "Error source: " & sSource & ";" & sError
bOK = WriteGlobalLog(GlobalPath, sPrefix, sLogText)
If Not bOK Then bOK = WriteLocalLog(sPrefix, sLogText)
If Not bOK Then bOK = WriteEventLog(sPrefix, sLogText)
'Return result
DumpError = bOK
Exit Function
Err_DE:
DumpError = False
End Function
Private Function WriteGlobalLog( _
ByVal GlobalPath As String, _
ByVal Prefix As String, _
ByVal Message As String _
) As Boolean
Dim sRows() As String
Dim sFileName
Dim iLoop As Integer
'Handle errors
On Error GoTo Err_WGL
'Prepare output data
sRows = Split(Message, ";")
'Open log file
sFileName = GlobalPath & "\" & App.EXEName & " " & Format$(Now, "YYYY-MM-DD") & " error log.txt"
Open sFileName For Append Access Write Shared As #199
'Write log data
For iLoop = LBound(sRows) To UBound(sRows)
Print #199, Prefix & sRows(iLoop)
Next
'Close log file
Close #199
'Return result
WriteGlobalLog = True
Exit Function
Err_WGL:
WriteGlobalLog = False
End Function
Private Function WriteLocalLog( _
ByVal Prefix As String, _
ByVal Message As String _
) As Boolean
Dim sRows() As String
Dim sFileName
Dim iLoop As Integer
'Handle errors
On Error GoTo Err_WLL
'Prepare output data
sRows = Split(Message, ";")
'Open log file
sFileName = App.Path & "\" & App.EXEName & " " & Format$(Now, "YYYY-MM-DD") & " error log.txt"
Open sFileName For Append Access Write Shared As #99
'Write log data
For iLoop = LBound(sRows) To UBound(sRows)
Print #99, Prefix & sRows(iLoop)
Next
'Close log file
Close #99
'Return result
WriteLocalLog = True
Exit Function
Err_WLL:
WriteLocalLog = False
End Function
Private Function WriteEventLog( _
ByVal Prefix As String, _
ByVal Message As String _
) As Boolean
Dim sRows() As String
Dim iLoop As Integer
'Handle errors
On Error GoTo Err_WEL
'Prepare output data
App.StartLogging "", vbLogToNT
sRows = Split(Message, ";")
'Write log data
For iLoop = LBound(sRows) To UBound(sRows)
App.LogEvent Prefix & sRows(iLoop), vbLogEventTypeError
Next
'Stop logging
App.StartLogging "", vbLogOff
'Return result
WriteEventLog = True
Exit Function
Err_WEL:
WriteEventLog = False
End Function
</code>
Lycka till!
// JohanSv: Hur kan man skapa och redigera en txt fil på VB?
Ingen kritik men ! Mycket skrik för lite ull,sa käringen när hon klippte grisen"Sv:Hur kan man skapa och redigera en txt fil på VB?
Det är väl det som är skillnaden på dig och mig. Jag ser gärna att loggning har förutsättningar attt lyckas och därför implementerar flera alternativa metoder ifall en skulle misslyckas, t.ex. p.g.a. nätverksproblem eller fulla hårddiskar. Men det är klart att man kan göra detta mycket mindre, men då blir det också med mindre funktionalitet och stabilitet.
Det är valfritt hur mycket man vill använda, så det står dig och andra fritt att klippa bort det man anser sig inte behöva.
// JohanSv: Hur kan man skapa och redigera en txt fil på VB?
/TonySv: Hur kan man skapa och redigera en txt fil på VB?
Jag undrar bara var jag kan hitta resultatet på writeEventLog?
MVH
TonySv:Hur kan man skapa och redigera en txt fil på VB?
Tanken med denna klassen är att den i första hand skall logga till en nätverksenhet (ifall man har flera datorer som kör samma komponent så skall man slippa springa runt och leta loggar på alla datorer), därav funktionen WriteGlobalLog.
WriteLocalLog anropas bara om den föregående misslyckas och för att inte tappa loggdata så är det bättre att logga lokalt, så man kan ju tyvärr tvingas springa runt på de olika burkarna om man har nätverksstrul.
Om nu dessutom datadisken är full (förutsätter att man har en datadisk för program och en systemdisk med os) så misslyckas ju även WriteLocalLog och då anropas WriteEventLog som då istället skriver till Windows event log. Denna hittar du via kontrollpanelen eller möjligtvis via MMC (Microsoft Managemnt Console) lite beroende på Windowsversion.
Hoppas detta var svaer på din fråga.
// Johan