在Lua中阅读整个文件

我试图读取一个完整的 mp3 文件以读出 id3 标签。那时我注意到, file:read("*a") 似乎不是读取整个文件而是一个小部分。因此,我尝试构建一些解决方法,以获取整个文件的内容:

function readAll(file)
    local f = io.open(file, "r")
    local content = ""
    local length = 0

    while f:read(0) ~= "" do
        local current = f:read("*all")

        print(#current, length)
        length = length + #current

        content = content .. current
    end

    return content
end

对于我的测试文件,这显示执行了 256 个读取操作,总共读取了约 113kB(整个文件为 ~7MB)。虽然这应该足以读取大多数 id3 标签,但我想知道 Lua 为什么会这样(特别是在读取大型文本文件(如 *.obj 或 *.ase)时没有这种情况)。是否有任何解释这种行为的解释或可靠读取整个文件的解决方案?

原文链接 https://stackoverflow.com/questions/10386672

点赞
stackoverflow用户107090
stackoverflow用户107090

我一定是漏了些什么,但我看不出为什么要使用循环。这个函数应该可以工作(但最好加入错误处理,以防无法打开文件):

function readAll(file)
    local f = assert(io.open(file, "rb"))
    local content = f:read("*all")
    f:close()
    return content
end
2012-04-30 17:32:21