用 Lua 读文件时 seek 不正确及解决

最近写 Lua 代码写的比较多,然后就遇到了一些奇怪的问题。我写了一个简单的程序,需要用 seek 得到当前的偏移量,但最后发现 seek 得到的结果是错的!而且还导致程序无法停止。

 

看看这段代码:

这段程序的意思是取得每一行的起始偏移量并输出每一行的内容。看起来没有任何问题。

测试文件:

只有两行,也没有任何问题。

 

运行:lua test.lua test.txt

 

然后就无限的输出“5:”。

 

最后我自己发现了问题是这样的:我的环境是 Windows,但那个测试文件的换行符是Unix(/n),不知道是 Lua 的问题还是 C Runtime 的问题,在这种情况下 seek 会返回错误的结果。而且似乎还会影响 read。因为如果我把那条 seek 语句去掉,一切正常,至少程序不会停不下来。这跟我们通常认为的 seek 是只读操作相违背。

 

如果把文件的换行符改成 Windows(/r/n)则一切正常。但我后来发现这个问题真正的解决方法是:第一行改为:io.open(arg[1], "rb"),使用二进制模式打开文件,皆大欢喜。

 

所以如果你要对文件进行比较底层的操作,最好用二进制模式打开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值