Чтение целых файлов в 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
для моего тестового файла, это показывает, что выполняется 256 операций чтения, общая сумма которых составляет ~ 113 КБ (весь файл ~ 7 МБ). Хотя этого должно быть достаточно для чтения большинства тегов id3, мне интересно, почему Lua ведет себя таким образом (особенно потому, что это не при чтении больших текстовых файлов, таких как *.oj или *.ase). Есть ли объяснения для этого поведения или, возможно, решение для надежного чтения всего файла?
Ответы
Ответ 1
Мне нужно что-то упустить, но я не понимаю, зачем нужен цикл. Это должно работать (но вам лучше добавить обработку ошибок, если файл не открывается):
function readAll(file)
local f = assert(io.open(file, "rb"))
local content = f:read("*all")
f:close()
return content
end