Reading whole files in Lua
io, lua
Solution
I must be missing something but I fail to see why a loop is needed. This should work (but you'd better add error handling in case the file cannot be opened):
function readAll(file)
local f = assert(io.open(file, "rb"))
local content = f:read("*all")
f:close()
return content
end
Problem
I am trying to read a full mp3 file in order to read out the id3 tags. That's when I noticed that file:read("*a") apparently does not read the full file but rather a small part. So I tried to build some kind of workaround in order to get the content of the whole file: ``` 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 ``` for my testfile, this shows that 256 reading operations are performed, reading a total of ~113kB (the whole file is ~7MB). Though this should be enough to read most id3 tags, I wonder why Lua behaves in this way (especially because it does not when reading large textbased files such as *.obj or *.ase). Is there any explanation for this behaviour or maybe a solution to reliably read the whole file?