我正在编写将使用日志文件的应用程序。我想要做的是当应用程序启动时,它将检查日志文件是否超过特定大小,如果是,它会从日志文件顶部删除“x”行数量以缩短日志文件的大小。这将是一个很好的方式去做这件事?将最新的条目写入文件的顶部,然后在删除时从底部删除会更容易些吗?删除文本文件顶部的x行数
0
A
回答
1
所以,你有一个日志文件,姑且称之为 “log.log
”
首先,移动log.log
到log.log.bak
。打开它阅读。一行一行阅读,直到阅读完x行数。写一个新文件,log.log
。继续阅读log.log.bak
中的每行,并将其写入log.log
。当没有更多行时,关闭log.log
和log.log.bak
,然后删除log.log.bak。
一些伪代码:
x = number of lines to delete
move log.log to log.log.bak
open log.log.bak for reading
while i have read < x lines
read a line and throw it away
open log.log for writing
while there are more lines in log.log.bak
read a line from log.log.bak
write the line to log.log
close log.log
close log.log.bak
delete log.log.bak
1
有很多的问题,左开
- 什么环境,是你?在Un * x中,您可以简单地'tail -100 input.txt> trimmed.txt'
- 您可以将文件加载到内存中,还是会过大?
- 你可以使用中间文件吗?
- 您有哪些语言可用/您是否熟悉?
- 您多久进行一次修整?如果您的写作比修剪更频繁,请写下底部(速度很快)并且很少执行昂贵的修剪操作。
如果您有C可用,您可以找到与fseek(f,0,SEEK_END);long size=ftell(f);
(打开f后立即)的文件大小。
如果您需要修剪,可以使用fseek(f,size-desired_size,SEEK_SET);
,然后使用while (fgetc(f)!='\n') {}
,这会将您带到相交线的末端。
然后将剩余的文件复制到新文件中。
1
我不会删除一定数量的行。基本上你必须处理整个文件,如果你这样做,那可能是很多处理。通常的做法是滚动日志文件(将其重命名,通常只添加日期)并重新开始。
还要记住,文件是一定大小不能保证有必要的行,在这种情况下,你只是以昂贵的方式重命名文件。
我经常发现它也适用于应用程序启动时也从文件顶部开始。
0
为每种日志保留几个日志文件File1-FileN。 当每个文件通过一些固定的大小时,填充文件File1然后File2等等。 当你填充FileN删除File1并重新开始(删除)并重写File1,File2 ...
这给你一个周期性的固定大小日志。
注意:这要求您跟踪哪些是要写入的当前日志文件。这可以存储在一个单独的日志文件中。
相关问题
- 1. 使用PowerShell删除顶部的文本文件
- 2. 如何删除文本文件中的每个第X行?
- 3. 如何删除文本文件的第一个“X”行?
- 4. 回声X文本行并删除
- 5. 删除文本文件中的行
- 6. 删除文本文件中的行
- 7. 删除文本文件中每行的当前路径部分
- 8. 删除文本文件中的文本行的上下文
- 9. 从文本文件中删除一行?
- 10. 从文本文件中删除行
- 11. 删除文本行和重写文件
- 12. 从文本文件中删除多行
- 13. 在文本文件中删除单行?
- 14. 删除X个文件X旧日--Powershell
- 15. jquery部分删除文本
- 16. 删除文本文件
- 17. 删除文本文件
- 18. 如何从VB6的文本文件中删除一行文本?
- 19. 从文本文件中删除包含特定文本的行
- 20. bash - 从文本文件中删除多行不同的文本
- 21. Git的部署:在删除文件时,按文件中删除
- 22. VIM - 如何删除屏幕顶部的白色条/文件
- 23. 批处理文件删除文本文件的前3行
- 24. 将单行添加到文本文件的顶部
- 25. Powershell删除x天前的文件
- 26. Talend - 删除大于X天的文件
- 27. forfile - 删除x天前的文件
- 28. XCode 4:删除顶级文件夹
- 29. Maven删除外部文件
- 30. 删除部分文件名