效果:

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO; namespace lxw_LogViewer
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
} long Offset = 0;//初始化偏移
String fileName = ""; private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = false;//该值确定是否可以选择多个文件
dialog.Title = "请选择文件";
dialog.Filter = "文本文件(*.log;*.txt)|*.log;*.txt;";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && dialog.FileName != "")
{
rtxtShow.Text = "";
Offset = 0;
fileName = dialog.FileName;
txtFile.Text = fileName;
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = fileName.Substring(0, fileName.LastIndexOf("\\") + 1);
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
watcher.Filter = fileName.Substring(fileName.LastIndexOf("\\") + 1);
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.EnableRaisingEvents = true; Offset = AppendContentToShow(Offset, fileName);
} } void watcher_Renamed(object sender, RenamedEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被重命名");
})); } void watcher_Deleted(object sender, FileSystemEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被删除");
})); } void watcher_Created(object sender, FileSystemEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被创建");
}));
} void watcher_Changed(object sender, FileSystemEventArgs e)
{
Offset = AppendContentToShow(Offset, fileName);
} private long AppendContentToShow(long offset, string filePath)
{
long newOffset = 0;
if (File.Exists(filePath))
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
newOffset = fs.Length;
if (fs.CanSeek)
{ if (offset > fs.Length)
{
offset = fs.Length;
} fs.Seek(offset, SeekOrigin.Begin);
byte[] b = new byte[newOffset - offset + 1];
int cnt, m = 0;
cnt = fs.ReadByte();
while (cnt != -1)
{
b[m++] = Convert.ToByte(cnt);
cnt = fs.ReadByte();
}
List<string> ltInfo = Encoding.UTF8.GetString(b).Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();
rtxtShow.Invoke(new Action(() =>
{
foreach (String item in ltInfo)
{
if (item.Contains("ERROR") || item.Contains("error"))
{
//高亮显示
rtxtShow.SelectionStart = rtxtShow.Text.Length;
rtxtShow.SelectionLength = item.Length;
rtxtShow.SelectionColor = Color.FromName("Red");
}
rtxtShow.AppendText(item + "\r\n");
}
}));
}
else
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("当前流不支持查找");
}));
}
}
}
return newOffset;
} }
}

附件下载

改进版-C# 日志监控软件 基于 FileSystemWatcher 02

C# 日志监控软件 基于 FileSystemWatcher的更多相关文章

  1. Ubuntu 16.04安装基于nethogs衍生的网络监控软件(应用实时网速监控)

    基于nethogs衍生的网络监控软件有如下所列举的: nettop显示数据包类型,按数据包的大小或数量排序. ettercap是以太网的网络嗅探器/拦截器/记录器 darkstat通过主机,协议等方式 ...

  2. 基于DirectShow和FFmpeg的USB摄像头监控软件-转

    第一个版本 ### 软件版本及实现功能 0.0.1 1. USB摄像头枚举和设备信息获取2. 实时视频观看3. 24小时不间断录像,录像文件支持暴风影音播放 ### 软件说明: 软件基于 Direct ...

  3. 运维开发实践——基于Sentry搭建错误日志监控系统

    错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...

  4. CEPH监控软件

    概述 目前主流的Ceph开源监控软件有:Calamari.VSM.Inkscope.Ceph-Dash.Zabbix等,下面简单介绍下各个开源组件. Calamari 概述 Calamari对外提供了 ...

  5. 常用开源<监控软件>介绍

    转载地址:http://blog.csdn.net/lx_9986/article/details/6803243 一.Zenoss Core Zenoss Core是开源企业级IT管理软件-是智能监 ...

  6. 1.监控软件zabbix-入门

    入门学习 首先要明白zabbix的读音(音同zæbix),主要进行网络相关的监控.它是一个基于WEB界面展示提供分布式系统监控的一款开源软件. zabbix有两部分:zabbix server和zab ...

  7. 自动化监控软件之zabbix安装

    自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...

  8. [Asp.net]SignalR实现实时日志监控

    摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...

  9. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  10. 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站

    总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...

随机推荐

  1. Java设计模式-观察者模式Observer

    介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用.在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体. 优点 ...

  2. [Android逆向] 重打包时报BrutException

    执行apktool b --use-aapt2 进行重打包时,重打包失败,抛出异常 apktool b /Users/***/work/appsApk/testApp --use-aapt2 I: U ...

  3. day06---基础优化之防火墙,yum源,字符集,vim补充,echo命令

    1.系统版本号 cat /etc/redhat-release hostnamectl uname -r 2.系统 时间硬件时间 date hwclock clock hwclock systohc ...

  4. ASP.NET XML序列化

    整理一下ASP.NET里面如何序列化实体为XML,获取解析XML内容为实体. 第一步要添加程序集引用,项目-->引用-->鼠标右键-->添加引用-->选择程序集-->Sy ...

  5. 深入理解maven及应用

    在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最近实在受不了乌龟一样的b ...

  6. 【Azure Storage Account Table】询问批量将存储账户中的表嵌入另一个账户中的办法

    问题描述 询问批量将存储账户中的表嵌入另一个账户中的办法? 问题解答 方式一:使用 AzCopy 使用Az copy做表格的导入导出,注意您需要使用Azcopy 7.3版本来实现对Table的操作,可 ...

  7. 【Azure Batch】在中国区批处理服务(Mooncake Batch Account)上实验自动池(Auto Pool)的创建/删除

    问题描述 在Azure Batch的介绍文档中,提出了自动池的概念, 它可以在任务完成后,自动删除Pool资源,详细介绍:https://docs.azure.cn/zh-cn/batch/nodes ...

  8. 【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)

    问题描述 当部署文件到Azure App Service上后,默认访问文件在wwwroot目录中,如appsettings.json文件,在通过URL+文件名的形式可以访问,这样敏感信息会被泄露出去, ...

  9. rt_snprintf()是什么

    在c++中snprintf()函数的解释 1,函数原型: int snprintf(char* dest_str,size_t size,const char* format,...); 2,功能 将 ...

  10. jquery ui autocomplete ajax返回数据自定义显示

    1.body里面的内容 <input type="text" class="inputTxt" id="txtJigou" autoc ...