我想要读取一个完整的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之类的大型文本文件时未出现此问题)。是否有关于这种行为的解释或可靠读取整个文件的解决方案?
f:read("*all")
中的*all
格式吗?它似乎等同于*a
?我在lua手册https://www.lua.org/manual/5.1/manual.html#pdf-file:read中找不到相关文档。 - Liu Hao*a
)。我猜我从 pil 的这一章节中获取了它:https://www.lua.org/pil/21.1.html,优点是(我猜)你不必记住*a
,*n
和*l
代表什么,因为你可以将其写出来。 - Henrik Ilgen