我正试图从ruby中的当前位置向后搜索2个字节。以下代码尝试查找上一行的结尾。
1.9.3-p448 :003 > while file.getc != '\n'
1.9.3-p448 :004?> file.seek(-2,IO::SEEK_CUR)
1.9.3-p448 :005?> end
Errno::EINVAL: Invalid argument - test
from (irb):4:in `seek'
from (irb):4
from /usr/local/rvm/rubies/ruby-1.9.3-p448/bin/irb:16:in `<main>'
我无法理解为什么我会收到此错误。它寻求完美的外部循环(相同的声明)。 test是文件名。
答案 0 :(得分:0)
我猜你的问题是你还没有进入文件的两个字节。我只是用一个简单的文本文件来做到这一点:
>> fp = File.new('pancakes.txt', 'r')
>> fp.readline
>> fp.seek(-2, IO::SEEK_CUR)
=> 0
>> fp.seek(-20, IO::SEEK_CUR)
Errno::EINVAL: Invalid argument - x.txt
文件的第一行只有几个字符,所以-20
会尝试将我放在文件的开头。
我认为你只需要在混合中加pos
支票:如果file.pos == 0
那么你就在开头而负面的搜寻会引发异常。