0

我试图从 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 是文件名。

4

1 回答 1

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那时您处于开始状态并且否定搜索将引发异常。

于 2013-07-30T23:13:42.097 回答