当前位置:首页 > 计算机 > 正文内容

C#读写日志文本文件

DYX5年前 (2020-08-18)计算机857

日志为文本文件
每列以制表符隔开 行以换行符隔开

本次示例简单实现如下相关功能:
1.正写日志文本 最新的日志放后面
2.倒写日志文本 最新的日志放前面
3.读日志文本内容显示在Label
4.读日志文本内容到DataTable 及 筛选后显示在GridView
--------------------
(以下操作并没有考虑相关如文件不存在等异常)

//1.正写日志 最新日志放最后面
protected void Button1_Click(object sender, EventArgs e)
{
    string strFilePath = Server.MapPath("log/log_200807_1.txt");
    System.IO.FileStream fs = new System.IO.FileStream(strFilePath, System.IO.FileMode.Append);
    System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.Default);
    sw.WriteLine("'" + DateTime.Now.ToString() + "'/t'zhangsan'/t'Login.aspx'/t'登录A'");
    sw.Close();
    fs.Close();
}
//2.倒写日志 最新日志放最前面
protected void Button2_Click(object sender, EventArgs e)
{
    string strFilePath = Server.MapPath("log/log_200807_1.txt");
    string strOldText = File.ReadAllText(strFilePath, System.Text.Encoding.Default);
    File.WriteAllText(strFilePath, "'" + DateTime.Now.ToString() + "'/t'zhangsan'/t'Login.aspx'/t'登录B'/r/n", System.Text.Encoding.Default);
    File.AppendAllText(strFilePath, strOldText, System.Text.Encoding.Default);
}

//3.读日志文本到Label
protected void Button3_Click(object sender, EventArgs e)
{
    string strFilePath = Server.MapPath("log/log_200807_1.txt");
    FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
    string strLine = sr.ReadLine();
    string str = "";
    while (strLine != null)
    {
        str += strLine.ToString() + "<br/>";
        strLine = sr.ReadLine();
    }
    sr.Close();
    fs.Close();
    this.Label1.Text = str;
}
//4.读日志文本内容到DataTable及筛选后显示在GridView
protected void Button4_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("日志时间");
    dt.Columns.Add("操作人员");
    dt.Columns.Add("日志页面");
    dt.Columns.Add("日志内容");
    
    string strFilePath = Server.MapPath("log/log_200807_1.txt");
    FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
    string strLine = sr.ReadLine();
    
    while (strLine != null)
    {
        string[] strArray = new string[4];
        strArray = strLine.Split('/t');
        DataRow dr = dt.NewRow();
        dr[0] = strArray[0];
        dr[1] = strArray[1];
        dr[2] = strArray[2];
        dr[3] = strArray[3];
        dt.Rows.Add(dr);
        strLine = sr.ReadLine();
    }
    sr.Close();
    fs.Close();
    //筛选
    DataView dv = dt.DefaultView;
    dv.RowFilter = " 日志内容 Like '%A%' and 日志时间 >= '2008-7-8 14:12:50' ";
    //this.GridView1.DataSource = dt;
    this.GridView1.DataSource = dv;
    this.GridView1.DataBind();
}

//取得当前所应操作的日志文件的路径 
private string GetLogFilePath() 

string strFilePath = ""; 
string strYearMonth = DateTime.Now.ToString("yyyyMM"); 
string strLogDirPath = Server.MapPath("log"); 
//判断当前月份是否已有日志文件 
string[] strFilesArray = Directory.GetFiles(strLogDirPath, "log_" + strYearMonth + "_*.txt"); 
if (strFilesArray.Length == 0) 

strFilePath = Server.MapPath("log/log_" + strYearMonth + "_1.txt"); 
//之前没有本年月的日志文件 需要新建 
using (File.Create(strFilePath)) 




else 

int intOrderID = 1; 
for (int i = 0; i < strFilesArray.Length; i++) 

string strA = strFilesArray[i].Trim(); 
strA = strA.Substring(strA.LastIndexOf("_")+1); 
strA = strA.Replace(".txt", ""); 
int intA = Convert.ToInt32(strA); 
if (intA > intOrderID) 
intOrderID = intA; 


strFilePath = Server.MapPath("log/log_" + strYearMonth + "_" + intOrderID.ToString() + ".txt"); 
this.Label1.Text = strFilePath; 
//之前有 需要判断最后一个是否超容 
FileInfo fileInfo = new FileInfo(strFilePath); 
if (fileInfo.Length >= 1024) 

//超容了 新建之 
int intCount = intOrderID + 1; 
strFilePath = Server.MapPath("log/log_" + strYearMonth + "_" + intCount.ToString() + ".txt"); 
using (File.Create(strFilePath)) 





return strFilePath ; 
}

讀寫ini文件 
[DllImport("kernel32")] 
private static extern long WritePrivateProfileString(string section, 
string key,string val,string filePath); 
[DllImport("kernel32")] 
private static extern int GetPrivateProfileString(string section, 
string key,string def, StringBuilder retVal,int size,string filePath); 

public void IniWriteValue(string Section,string Key,string Value,string filePath) 

WritePrivateProfileString(Section,Key,Value,filePath); 
public string IniReadValue(string Section,string Key,string filePath) 

StringBuilder temp = new StringBuilder(255); 
int i = GetPrivateProfileString(Section,Key,"",temp, 
255, filePath); 
return temp.ToString(); 



}  

获取指定文件夹的大小 
public long countsize( System.IO.DirectoryInfo dir) 

long size=0; 
FileInfo[] files=dir.GetFiles(); 
foreach(System.IO.FileInfo info in files) 

size+=info.Length; 

DirectoryInfo[] dirs=dir.GetDirectories(); 
foreach(DirectoryInfo dirinfo in dirs) 

size+=countsize(dirinfo); 

return size; 
}   

读取文件: 
ResourceManager _textResManager = new ResourceManager("testproject.MultiLanguage_Eng", Assembly.GetExecutingAssembly()); 
string resString = _textResManager.GetString("keyname");


“C#读写日志文本文件” 的相关文章

siege压力测试工具安装和介绍

siege压力测试工具安装和介绍

1.siege介绍输入参数说明:输入名称解释说明-V, –version打印版本信息-h, –help打印帮助信息-C, –config显示配置信息-v, –verbose打印冗余配置信息。-g, –get显示HTTP交易。-c, –concurrent=NUM设置并发用户数-u, –url=”UR...

CentOS 开启 NSCD 缓存服务以加快 DNS 解析速度

CentOS 开启 NSCD 缓存服务以加快 DNS 解析速度

1.安装NSCDyum install nscd2.修改配置文件。使用vi编辑器修改配置:vi /etc/nscd.conf另起一行添加:enable-cache hosts yes如图:3.启动NSCD服务service nscd start...

Win10 企业版ltsc  1709 无法访问局域网共享问题及解决

Win10 企业版ltsc 1709 无法访问局域网共享问题及解决

1.前言  Win10的安全性设置越来越严格,与此同时,也带来了易用性的缺失。新手往往会陷入很多功能不能使用的窘境中,从而导致了对Win10的排斥。局域网共享就是一个很典型的例子。  对很多中小企业而言, 无密码的局域网共享是非常方便和实用的功能,对于提升生产力而言,安全性是次要...

QPS是什么意思?一般的服务器qps多少?

QPS是什么意思?一般的服务器qps多少?

QPSQPS即每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 每秒查询率因特网上,经常用每秒查询率来衡量域名系统服务器的机器的性能,其即为QPS。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。计算关系:QPS = 并发量 / 平均响应时间并...

Win10企业版和LTSB\LTSC分支有什么不同

Win10企业版和LTSB\LTSC分支有什么不同

Win10企业版相对于家庭版、教育版、专业版的用户人群不同,面向企业用户。但是Win10又出现了LTSB版和N版。这个LTSB版和N版是什么?两者区别在哪?微软弱的服务器操作系统Server2019也有长期服务版本LTSC版,提供10年技术支持。对于企业来说,有技术支持最好。Win10 LTSB 2...

高级运维的一天

高级运维的一天

很多刚学linux运维的朋友,总是搞不懂,运维工程师工作中干些啥?学的这些东西有什么用?还有很多人会以为运维嘛,不就是一个修电脑修网线的。有句话说得好:运维做到极致,不是出现问题时能轻松解决,而是知道怎么提前预防问题的出现,能将故障扼杀在萌芽里。今日我特来总结总结一个高级运维干什么,希望能帮助即将跨...