大文件中的搜索功能出错

时间:2013-04-21 17:44:30

标签: lua

我有一个关于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的位置(只比1GB小于2GB),但当我试图看到2GB或更大的位置然后失败

提前致谢

2 个答案:

答案 0 :(得分: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解决方法。

答案 1 :(得分: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