文件的总行数(向后计数)

时间:2011-07-07 05:54:34

标签: c file eof

对于给定的文件,我可以向后计算行数吗?即从EOF开始,将线计数到开头?

我可以直接到文件的末尾。从那里开始表单,继续寻找新行char(指示新行)并继续增加line_number计数。但是我的结局条件应该是什么?

EOF有反面吗? :)

我自己的建议:如果我从头开始寻找Xth线,我总是可以从这个行号开始得到它:total_lines - X ---足够公平吗?

动机:我有兴趣从一个巨大的(读取真正巨大的)文件的末尾到达Xth行。因此,寻找最佳解决方案。

PS:这不是作业(虽然我是一辈子的学生:p)

3 个答案:

答案 0 :(得分:4)

当我这样做时(例如,写了一个标准tail的粗略等价物)我从最后读了一个块,计算了它中的线,如果我没有足够的线,使用fseek向后看并读取另一个块(但我不确定后者是否真的发生过,除非我强迫它进行测试)。

答案 1 :(得分:1)

EOF的反面是pos == 0。

POSIX tail命令执行此操作;例如代码,请参阅http://www.koders.com/c/fid8DEE98A42C35A1346FA89C328CC3BF94E25CF377.aspx

答案 2 :(得分:0)

如果你想向后打印线条,你可以使用递归来做到这一点(不确定你的意思是计数,因为计算行数是向前和向后相同)。这听起来像C的介绍的作业问题,所以我会避免放置代码但是这样想。读取一行,如果不是EOF递归读取下一行,否则打印该行并返回。