kcobain Skrevet 28. januar 2006 Del Skrevet 28. januar 2006 (endret) Hei. Jeg lurte på om noen visste om en god måte og åpne en tekstfil og lese de 10 siste linjene? Helst i realtime. Er en logg som skal lese. Hadde vært greit å slippe og oppdatete manuelt. Hvis det går da. På forhånd takk. Endret 28. januar 2006 av kcobain Lenke til kommentar
kcobain Skrevet 29. januar 2006 Forfatter Del Skrevet 29. januar 2006 Ingen som har noen ideer? Trenger ikke være kode bare et forslag til hva jeg kan gjøre. Hvilke funksjoner osv. Alt hjelper. Lenke til kommentar
j000rn Skrevet 30. januar 2006 Del Skrevet 30. januar 2006 Med denne holdes filen åpen, men andre prosesser kan fortsatt skrive til den. Du får legge til kode for å huske på de 10 siste linjene selv. Den kan kjøres f.eks. som en egen tråd. FileStream fs = File.Open("test.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader sr = new StreamReader(fs); while (Console.KeyAvailable == false) { System.Threading.Thread.Sleep(500); if (sr.EndOfStream == false) { string s = sr.ReadLine(); Console.WriteLine(s); } } Lenke til kommentar
wolf5 Skrevet 15. februar 2006 Del Skrevet 15. februar 2006 Her har du en logklasse jeg mekket for å følge med på en loggfil. Fu får se om du kan bruke noe fra denne. LogMonitor lm = new LogMonitor(@"C:\mylog.txt" , false); int c = 1; while(!lm.IsEmpty) Console.WriteLine(c++ + " - " + lm.GetLine()); while(true){ lm.Refresh(); while(!lm.IsEmpty) Console.WriteLine(c++ + " - " + lm.GetLine()); System.Threading.Thread.Sleep(200); } using System; using System.Collections; using System.IO; using System.Text; namespace MyNamespace { /// <summary> /// Summary description for LogMonitor. /// </summary> public class LogMonitor { private string LogFile = ""; private int MaxLines = 100; //Holder de siste 100 linjene private Queue Lines = new Queue(); private long FileSize = 0; public LogMonitor(string LogFile, bool ReadOld) { this.LogFile = LogFile; FileInfo fi = new FileInfo(LogFile); FileSize = fi.Length; if(ReadOld) ReadLog(FileSize); } private void ReadLog(long NoOfBytes){ StringBuilder sb = new StringBuilder(); long filepos = FileSize; FileStream fs = new FileStream(LogFile, FileMode.Open, FileAccess.Read,FileShare.ReadWrite); fs.Position = filepos; int counter = 0; ArrayList tmp = new ArrayList(); long origfilpos = filepos-1; long minpos = FileSize-NoOfBytes; while(counter<MaxLines){ filepos--; fs.Position = filepos; int i = fs.ReadByte(); char c = Convert.ToChar(i); if(c=='\n'){ string backward = sb.ToString(); if(!(backward.Length==0 && filepos == origfilpos)){ //Dersom siste linje og tom, ignorer char[] chaarr = backward.ToCharArray(); sb=new StringBuilder(); for(int ci=chaarr.Length-1;ci>-1;ci--){ sb.Append(chaarr[ci]); } string right = sb.ToString(); tmp.Add(right); sb=new StringBuilder(); counter++; }else{ //FileSize--; } }else if(c=='\r'){ }else{ sb.Append(c); } if(filepos<=minpos){ if(sb.Length>0){ //Noe data som burde hørt til forrige linje. Lager ny linje med disse string backward = sb.ToString(); char[] chaarr = backward.ToCharArray(); sb=new StringBuilder(); for(int ci=chaarr.Length-1;ci>-1;ci--){ sb.Append(chaarr[ci]); } string right = sb.ToString(); tmp.Add(right); counter++; } break; } } for(int i=tmp.Count-1; i>-1; i--)Lines.Enqueue(tmp[i]); //Console.WriteLine(Lines.Count); } public void Refresh(){ FileInfo fi = new FileInfo(LogFile); long fs = fi.Length; long filesize = fs-FileSize; FileSize = fs; if(filesize<0){ //Filen er blitt mindre. Les på nytt igjen //Console.WriteLine("Filen var mindre. Leser hele på nytt."); ReadLog(FileSize); }else if(filesize>0){ //Filen er blitt større. Les de siste endringer //Console.WriteLine("Filen var større. Legg til linjer."); ReadLog(filesize); }else{ //Console.WriteLine("Ingen endring..."); } } public bool IsEmpty{ get{return Lines.Count==0 ? true : false;} } public string GetLine(){ return (string)Lines.Dequeue(); } public string PeekLine(){ return (string)Lines.Peek(); } } } Lenke til kommentar
kcobain Skrevet 15. februar 2006 Forfatter Del Skrevet 15. februar 2006 Takk for det, Den koden som fulgte med så kom det ikke no fram. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå