为了读出id3标记,我正在尝试读取完整的mp3文件。这时我注意到了这个文件: 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等基于文本的大型文件时不会)。对这种行为有什么解释吗?或者可能有一个可靠地读取整个文件的解决方案?
发布于 2012-05-01 01:32:22
我一定是遗漏了什么,但是我不明白为什么需要一个循环。这应该可以工作(但你最好添加错误处理,以防文件无法打开):
function readAll(file)
local f = assert(io.open(file, "rb"))
local content = f:read("*all")
f:close()
return content
endhttps://stackoverflow.com/questions/10386672
复制相似问题