在Lua中读取整个文件

时间:2012-04-30 15:56:47

标签: io lua

我正在尝试阅读完整的mp3文件以便读出id3标签。就在那时我注意到那个文件: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

对于我的testfile,这表明执行了256次读取操作,总共读取了~113kB(整个文件大约为7MB)。虽然这应该足以读取大多数id3标签,但我想知道为什么Lua会以这种方式运行(特别是因为它在读取大型基于文本的文件时不会,例如* .oj或* .ase)。有没有对此行为的解释或可能是可靠读取整个文件的解决方案?

1 个答案:

答案 0 :(得分:50)

我必须遗漏一些东西,但我不明白为什么需要循环。这应该有效(但是如果无法打开文件,你最好添加错误处理):

function readAll(file)
    local f = assert(io.open(file, "rb"))
    local content = f:read("*all")
    f:close()
    return content
end