public static void ReadLog(FileChanged fc) { var fn = fc.FoundFile; var fs = new FileStream(fn, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); fs.Seek(fc.Length, 0); using (StreamReader sr = new StreamReader(fs)) { //Skip(sr, Convert.ToInt32(fc.Lines)); while (sr.Peek() >= 0) { string line = sr.ReadLine().CleanString(); var data = line.Split(' '); Console.WriteLine($"{fc.Prefix} :: {line}"); bool clr = false; foreach (string d in data) { if (d.ToLower() == "clr" || d.ToLower() == "clear" || d.ToLower() == "status" || d == "0") { clr = true; } } if (!clr) { IEnumerable <string> data6 = data.Where(a => a.Length == 6); foreach (string d in data6) { Check.checkSystems(d, fn, fc.Prefix, line); } } } } fs.Dispose(); //return Task.CompletedTask; }
protected virtual void OnFileChanged(FileChanged e) { EventHandler <FileChanged> handler = fileChanged; if (handler != null) { handler(this, e); } }
private void StartMonitor(Object stateInfo) { foreach (var fi in monitorFiles) { Console.WriteLine($"Monitoring: {fi.fullName}"); } DateTime dtkeep = DateTime.Now; while (threadMonitor) { Thread.Sleep(500); foreach (var di in dir.GetFiles()) { if (monitorFiles.Exists(a => a.fullName == di.FullName)) { var lfi = monitorFiles.FirstOrDefault(a => a.fullName == di.FullName); lfi.Created = di.CreationTimeUtc; long currentLength; using (var fs = new FileStream(lfi.fullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){ currentLength = fs.Length; } if (lfi.firstCheck && lfi.length != currentLength) { // TODO activate event Debug.WriteLine($"file changed: {lfi.prefix}"); var fc = new FileChanged(lfi.fullName, lfi.length, lfi.prefix); Debug.WriteLine($"Reading: {lfi.name} lines: {lfi.length} newlines{currentLength - lfi.length} fullName: {lfi.fullName}"); lfi.length = currentLength; //await.Task.Run(Read.ReadLog(fc)); // Read.ReadLog(fc); OnFileChanged(fc); } lfi.length = currentLength; lfi.firstCheck = true; lfi.lastWrite = di.LastWriteTimeUtc; lfi.prefix = GetFilePrefix(di.Name); if (lfi.lastWrite < DateTime.UtcNow.AddDays(-1)) { monitorFiles.Remove(lfi); UpdateLogPool(); } } } if (DateTime.Now.AddMinutes(-5) > dtkeep) { dtkeep = DateTime.Now; UpdateLogPool(); } } }
static void EventFileChanged(object sender, FileChanged args) { Read.ReadLog(args); }