为什么IO#lineno总是不指示IO#read的下一个读取点

时间:2012-06-30 05:36:43

标签: ruby io

f= File.open('path_to_file','w')


f.lineno
#=> 0

f.gets
#=>"this is the content of the first line"

f.lineno

#=>1 # the lineno cooresponse to the next read point of IO#gets

f.rewind

f.lineno

#=>0

f.read

#=>"all the content in the file"

f.lineno

#=>0 # the lineno still is the beginning 

f.read 

#=>"" # but I can't get anyting , it seems like the read point reach to the end of the file, so the f.lineno should be 3, instead of 0

或者是否有其他方法可以了解IO流的下一个读取点

f.lineno

#=>0

1 个答案:

答案 0 :(得分:3)

Ruby IO docs开始,lineno不会告诉您流中的位置。相反,它告诉你已经调用了多少次。由于read函数未使用gets,因此lineno值不会更改。

您可能需要的是pos,它会以字节为单位告诉您文件中的当前偏移量。您还可以将pos设置为跳转到文件中的其他位置。