XML er ikke velegnet som permanent log fordi enten skal du genskrive hele filen hele tiden eller så skal den være permanent åben og dermed ikke valid XML førend den lukkes (eller så skal du lave et hack !)
Har du læst min artikel om brug af XML i VB.NET ?
(den løser ikke lige umiddelbart dit problem, men giver lidt overblik over værktøjskassen)
hmm, jeg har læst den men kunne ikke lige gemmen skue hvordan. der var jo en som hade lavet nået som liner det jeg ledte efter (http://www.eksperten.dk/artikler/562)
Imports System Imports System.IO imports System.Threading
Public Class MainClass Public Shared Sub Main(ByVal args As String()) ' sådan læser man og udregner Dim sr As StreamReader = New StreamReader("C:\test.dat") Dim line1 As String Dim line2 As String line1 = sr.ReadLine line2 = sr.ReadLine While line1 <> Nothing Dim line1parts() As String = line1.Split(",".ToCharArray) Dim line2parts() As String = line2.Split(",".ToCharArray) Dim t1 As DateTime = DateTime.Parse(line1parts(1)) Dim t2 As DateTime = DateTime.Parse(line2parts(1)) Dim dt As TimeSpan = t2.Subtract(t1) Console.WriteLine("Tid = " & dt.TotalSeconds) line1 = sr.ReadLine line2 = sr.ReadLine End While sr.Close ' sådan skriver man en ny Dim sw As StreamWriter = New StreamWriter("C:\test.dat", True) sw.WriteLine("start," + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy")) Thread.Sleep(5000) sw.WriteLine("opdateret," + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy")) sw.Close End Sub End Class
men kunne man ikke lave det sådan at programmet bare skriv DateTime til filen og der efter overskriv det der stod i filen, for hvis den køre i 300 dage så bliver det til en del log :)
og der efter hendte det ind næste gang man startede programmet, og ligge det over i en xml fil ???
her er er et eksempel som kan opdatere den sidste linie i en komma separeret fil:
Imports System Imports System.IO Imports System.Text imports System.Threading
Public Class MainClass Public Shared Sub ReadAndShow() Dim sr As StreamReader = New StreamReader("C:\test.dat") Dim line1 As String Dim line2 As String line1 = sr.ReadLine line2 = sr.ReadLine While line1 <> Nothing Dim line1parts() As String = line1.Split(",".ToCharArray) Dim line2parts() As String = line2.Split(",".ToCharArray) Dim t1 As DateTime = DateTime.Parse(line1parts(1)) Dim t2 As DateTime = DateTime.Parse(line2parts(1)) Dim dt As TimeSpan = t2.Subtract(t1) Console.WriteLine("Tid = " & dt.TotalSeconds) line1 = sr.ReadLine line2 = sr.ReadLine End While sr.Close End Sub Public Shared Sub AppendOne() Dim sw As StreamWriter = New StreamWriter("C:\test.dat", True) sw.WriteLine("start," + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy")) sw.WriteLine("opdateret," + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy")) sw.Close End Sub Public Shared Sub UpdateLast() Dim s As String = "opdateret," + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy") & Convert.ToChar(13) & Convert.ToChar(10) Dim fs As FileStream = New FileStream("C:\test.dat", FileMode.Open, FileAccess.ReadWrite) fs.Seek(-s.Length, SeekOrigin.End) fs.Write(Encoding.Default.GetBytes(s), 0, s.Length) fs.Close End Sub Public Shared Sub Main(ByVal args As String()) ReadAndShow AppendOne Thread.Sleep(5000) UpdateLast End Sub End Class
ja fordi programmet skal køre 24/7 365 og ca hver 1 min. det vil give en ret stor log (31536000 linjer på et år), så hvis man skulle dette så skulle man også lave en cleaner til logen...
og hvis det kun er sidset linje der bliver lavet om så er støste log ca 1000 linjer max på et år.
jeg har opretted et spørsmål mere ;) med hvordan jeg hiver de data ud som jeg gerne vil se. http://www.exp.dk/spm/655236
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.