创建一个TXT文件后。
怎样让行写入文件的前面部分。并且控制整个文件的大小(或行数) 最好别每次都读取整个文件。原因是日志写入很频繁。并且有很多个日志。
怎样让行写入文件的前面部分。并且控制整个文件的大小(或行数) 最好别每次都读取整个文件。原因是日志写入很频繁。并且有很多个日志。
解决方案
4
lz为什么不用数据库呢?方便操作,还可以避免多个文件同时操作同一个文件的麻烦
你的第一个问题,要想把最新写入的东西放到前面,就必须移动原有内容,效率可想而知了,不建议这么做
第二个问题,可以按行读取,如下面
你的第一个问题,要想把最新写入的东西放到前面,就必须移动原有内容,效率可想而知了,不建议这么做
第二个问题,可以按行读取,如下面
System.IO.FileStream fs = new System.IO.FileStream("F:\123.txt",System.IO.FileMode.Open, System.IO.FileAccess.Read); System.IO.StreamReader sm = new System.IO.StreamReader(fs); while(sm.Peek()>=0) { Response.Write(sm.ReadLine() + "<br />"); } sm.Dispose(); sm.Close();
你想要读取指定行数,可以在while那里加条件即可
4
若写入到文件的开始处,就会将原有的内容覆盖掉,显然不是你期望的
那么你就得将原有的内容向后移动,以腾出地方写新内容,但这又与 别每次都读取整个文件 相矛盾
所以日志文件是应该以追加方式写入内容
你可以记录下每次写入前的文件长度(简单的索引),读取时 Seek 到指定位置再开始读
那么你就得将原有的内容向后移动,以腾出地方写新内容,但这又与 别每次都读取整个文件 相矛盾
所以日志文件是应该以追加方式写入内容
你可以记录下每次写入前的文件长度(简单的索引),读取时 Seek 到指定位置再开始读
4
追加文本模式操作文件。
StreamWriter sw = File.AppendText(Server.MapPath(".")+"\myText.txt"); sw.WriteLine("Android"); sw.WriteLine("Java"); sw.WriteLine(".NET"); sw.Flush(); sw.Close();
4
据本人所知,常见的日志系统,都没有倒着写
而且驱动也不允许你在文件开头插入数据
而且驱动也不允许你在文件开头插入数据
4
你这思路有问题,从头开始写,不覆盖则必然导致整个文件的重新保存,io开销最大