日志文件循环写入

gf4t47 2005-03-17 11:16:57
做个简单的日志文件。
我用a+方式fopen一个文件,这样每次打开后就接着文件末尾写进新的内容。
问题是我不能让这个文件无限增大。文件大小到了某个值后,就又从文件头开始写进新的内容。但是又不想把原来的内容完全冲掉,新写进多少就覆盖多少就可以了。以后又接着上次写入内容的末尾继续写入新的内容,直到又到达文件大小限制的末尾极限。再从头写,如此循环。
我打算在判断了文件结束符后用r+方式打开文件从头写。然后再用a+打开,接着上次写入内容的末尾继续写。可是新写进内容的结尾符和原来内容的结尾符要怎么区分呢?
望高手指教^_^
...全文
590 1 收藏 13
写回复
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日
可是新写进内容的结尾符和原来内容的结尾符要怎么区分呢?
后面的可是文件结束符哟!
我想,没有别的办法,就是在每次写入的时候,把时间写到当次记录的最后,下次打开文件时,找最新的时间,从此处开始往下写!
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告