如何创建一个文件(日志文件),并且倒序写入,控制大小?

boyyao 2016-07-23 09:10:32
创建一个TXT文件后。
怎么样让行写入文件的前面部分。。并且控制整个文件的大小(或者行数) 最好别每次都读取整个文件。因为日志写入很频繁。并且有很多个日志。。。
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzh_0820 2019-01-17
  • 打赏
  • 举报
回复
如果日志很多就按天或者按小时产生,那么查看日志时候方便些。
xuzuning 2016-07-24
  • 打赏
  • 举报
回复
若写入到文件的开始处,就会将原有的内容覆盖掉,显然不是你期望的 那么你就得将原有的内容向后移动,以腾出地方写新内容,但这又与 别每次都读取整个文件 相矛盾 所以日志文件是应该以追加方式写入内容 你可以记录下每次写入前的文件长度(简单的索引),读取时 Seek 到指定位置再开始读
CailyPersonal 2016-07-24
  • 打赏
  • 举报
回复
你这思路有问题,从头开始写,不覆盖则必然导致整个文件的重新保存,io开销最大
Poopaye 2016-07-24
  • 打赏
  • 举报
回复
据我所知,常见的日志系统,都没有倒着写 而且驱动也不允许你在文件开头插入数据
我叫小菜菜 2016-07-24
  • 打赏
  • 举报
回复
追加文本模式操作文件。
StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");     
sw.WriteLine("Android");     
sw.WriteLine("Java");     
sw.WriteLine(".NET");     
sw.Flush();     
sw.Close();
秋的红果实 2016-07-23
  • 打赏
  • 举报
回复
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那里加条件即可
简介:这份资源是我以前偶然间在网上找到的一份前辈总结的很实用的java实例,有时间我就拿出来看看,不只是应用,算法的实现过程也很重要。我觉得这份文档对于java开发人员来说是很实用的,所以拿出来分享一下。 内容包括:Java的16进制与字符串的相互转换函数 JAVA时间格式化处理 ,将毫秒转化为日期, 文本的倒序输出 ,判断一个数字是奇数还是偶数 ,用Hibernate实现分页, 35选7彩票程序 ,获取GMT8时间, 中文乱码转换 ,小标签 ,Big5字与Unicode的互换, 取得服务器当前的各种具体时间,用半角的特殊符号代替全角的特殊符号,数组和数组之间的转换代码,从资源文件里读取值的类,一个随机类,计算传入值是否星期六,为RootPaneContainer组件添加键盘事件,将数组转成字符串 在调试或记录日志时用到,转换文件大小,多线程的世界时钟,显示巴黎,罗马,上海时间, AWT界面,Java日期格式化及其使用例子,几个常用方法,判断字符是否属于中文,异常处理类,去掉字符串中重复的子字符串,将指定byte数组以16进制的形式打印到控制台,获得任意一个整数的阶乘,递归,拷贝一个目录或者文件到指定路径下,简单的txt转换xml,字母排序(A-Z)(先大写,后小写),列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤,字符串匹配的算法,写入日志

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧