gpt4 book ai didi

windows - Lua - io.open() 最多只有 2 GB?

转载 作者:可可西里 更新时间:2023-11-01 13:22:44 24 4
gpt4 key购买 nike

我正在使用 Lua 脚本来确定文件大小:

local filesize=0
local filePath = "somepath.bin"
local file,msg = io.open(filePath, "r")
if file then
filesize=file:seek("end")
file:close()
filePresent = true
end

但是,这似乎只适用于最大 2GB 的文件。对于较大的文件,filesize 始终为 nilio.open有什么限制吗?如果是这样,我该如何解决这个问题?

在 Windows Server 2008 R2 64 位上运行 Lua 5.1.4

最佳答案

问题不在io.open,而是在file:seek。您可以这样检查错误:

filesize, err = file:seek("end")
if not filesize then
print(err)
end

错误信息可能是Invalid argument。这是因为对于大于 2GB 的文件,它的大小超过了 32 位 long 可以容纳的大小,这导致 C 函数 fseek 无法工作。

在 POSIX 系统中,Lua 使用 fseeko 来获取 off_t 的大小,而不是 fseek 中的 long。在 Windows 中,有一个 _fseeki64,我猜它可以做类似的工作。如果这些不可用,则使用 fseek,这会导致问题。


相关来源是liolib.c (Lua 5.2)。正如@lhf 指出的那样,在 Lua 5.1 中,始终使用 fseek ( source )。升级到 Lua 5.2 可能会解决问题。

关于windows - Lua - io.open() 最多只有 2 GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com