0

我有一个关于 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 或更大的位置时会失败。

提前致谢

4

2 回答 2

3

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

-- Program
print(io.open[[D:\_Best Films\The Grudge 1,2\Proklyatie.2004.x264.BDRip.720p.mkv]]:seek'end')

-- Output on Lua 5.2.1 / Windows
5706609998

-- Output on Lua 5.1.4 / Windows
nil     Invalid argument        22

对于这个问题,这不是纯粹的 Lua 解决方法。

于 2013-04-21T18:39:23.820 回答
0

我不知道是什么导致了代码中的特定错误,但如果我想知道文件的大小,我会使用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-21T17:51:20.070 回答