我有一个关于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或更大的位置然后失败
提前致谢
答案 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