大文件中的seek函数出错。

我有一个关于Lua和io库的问题。

我有一个简单的函数来获取文件大小:

function checkisoLIMG(file)
    local iso = assert(io.open(file, "rb"));
    if (iso) then
        local size = iso:seek("end");
        iso:close();
        return size;
    else
        return "error";
    end
end

当我尝试获取一个大文件(大约3GB或4GB)的大小时,该函数返回nil或-1,但对于小文件可以正常工作。有人知道如何解决这个问题吗?或者有任何脚本来获取文件大小。

问题在于io.seek,因为程序可以正常打开文件,并且我可以寻找比2147483647低的位置(比2GB少1字节),但是当我尝试查找2GB或更大的位置时就会失败。

先感谢您。

点赞
用户90511
用户90511

我不知道您代码中具体的错误原因,但如果我想知道文件的大小,我会使用LuaFilesystem库。它不是Lua基本标准库的一部分,但它是我知道的最常用的文件系统库。它与LuaForWindows发行版一起捆绑出现,也可以通过Luarocks轻松安装。

local lfs = require 'lfs'

function getFileSize(filename)
   local attrs = lfs.attributes(filename)
   if not attrs then error("File not found") end
   return attrs.size
end
2013-04-21 17:51:20
用户1847592
用户1847592

这取决于Lua版本和操作系统。

--程序
print(io.open[[D:\_最佳影片\咒怨1,2\Proklyatie.2004.x264.BDRip.720p.mkv]]:seek'end')

-- 在Lua 5.2.1 / Windows上输出
5706609998

-- 在Lua 5.1.4 / Windows上输出
nil     Invalid argument        22

这个问题没有纯Lua的解决方案。

2013-04-21 18:39:23