日志文件循环写入

gf4t47 2005-03-17 11:16:57
做个简单的日志文件。
我用a+方式fopen一个文件,这样每次打开后就接着文件末尾写进新的内容。
问题是我不能让这个文件无限增大。文件大小到了某个值后,就又从文件头开始写进新的内容。但是又不想把原来的内容完全冲掉,新写进多少就覆盖多少就可以了。以后又接着上次写入内容的末尾继续写入新的内容,直到又到达文件大小限制的末尾极限。再从头写,如此循环。
我打算在判断了文件结束符后用r+方式打开文件从头写。然后再用a+打开,接着上次写入内容的末尾继续写。可是新写进内容的结尾符和原来内容的结尾符要怎么区分呢?
望高手指教^_^
...全文
1517 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flood1984 2005-03-20
  • 打赏
  • 举报
回复
在文件的开头存放一段信息,
用来记录从头读多远可以到达当前的末尾
zhousqy 2005-03-18
  • 打赏
  • 举报
回复
up
YFY 2005-03-18
  • 打赏
  • 举报
回复
新的一天开始的时候把原来lonX.evt,X为当天日期的那个日志remove掉,
然后每次a+
suyouxin 2005-03-18
  • 打赏
  • 举报
回复
一个建议哈,文件的头几个字节保留上次的读写位置
YFY 2005-03-18
  • 打赏
  • 举报
回复
搞简单点就行了。

根据日期循环写啊。

log1.evt log2.evt ... log31.evt 最多31个,可以保存一个月的日志,
编程也很方便。
Rudy_zhuang 2005-03-18
  • 打赏
  • 举报
回复
最好的方式是:
recordA;
recordB;
recordC;
recordD;

写入recordE

recordB;
recordC;
recordD;
recordE;

而不是

recordE;
recordB;
recordC;
recordD;

---------------------
这儿本来就是下面这样啊,每人会理解成第二种吧?
recordB;
recordC;
recordD;
recordE;
写文件用按照链表的方式?需要吗?你倒是试试看呢。
yhb7805 2005-03-18
  • 打赏
  • 举报
回复
呵呵,感觉这其实是一个循环记录,最好的方式是:

recordA;
recordB;
recordC;
recordD;

写入recordE

recordB;
recordC;
recordD;
recordE;

而不是

recordE;
recordB;
recordC;
recordD;

把文件按照链表的方式来看就行了




Rudy_zhuang 2005-03-18
  • 打赏
  • 举报
回复
1 用一个数据结构记录当前文件的大小,实际内容的起始地址和结束地址等信息。
2 open该文件,读取文件信息。
3 在write之前,判断当前的文件大小+写入的数据大小 > 最大值?.
4 若超过了最大值,移动文件指针fp, 到:起始地址+文件大小+写入的数据大小-最大值。
5 修改文件信息,写入数据。
gf4t47 2005-03-18
  • 打赏
  • 举报
回复
使用多个日志文件的方案我也想过,作为最后的不得以手段吧^_^
文件头部使用固定大小的结构保存文件信息,这个点子的确不错,谢谢。
再等一天,看看还有没有什么别的点子,就结题了
谢谢帮忙出点子的各位。
ckc 2005-03-18
  • 打赏
  • 举报
回复
有个简便的方法
你用两个日志文件A和B,限定大小,一个写满了就换一个写
这样你至少保留了1个文件的内容
pcboyxhy 2005-03-18
  • 打赏
  • 举报
回复
文件头部使用固定大小的结构保存文件信息
这的确是个好办法
gnixemos 2005-03-18
  • 打赏
  • 举报
回复
一般做法是多个文件,如sqlserver的6个日志,写满了,重新覆盖第一个

如果关键的地方,比如需要根据故障查日志的,最好按时间命名日志文件,这样不会丢掉
zhangfjj 2005-03-17
  • 打赏
  • 举报
回复
可是新写进内容的结尾符和原来内容的结尾符要怎么区分呢?
后面的可是文件结束符哟!
我想,没有别的办法,就是在每次写入的时候,把时间写到当次记录的最后,下次打开文件时,找最新的时间,从此处开始往下写!

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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