Я пытаюсь прочитать полный mp3-файл, чтобы прочитать теги id3. Вот когда я заметил, что файл: read ("* a"), по-видимому, не читает полный файл, а скорее небольшую часть. Так что я пытался построить какой-то обходной путь для того, чтобы получить содержимое файла целиком:Чтение всего файлов в Lua
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 операций чтения выполняются, чтение в общей сложности ~ 113Кб (весь файл составляет ~ 7 МБ). Хотя этого должно быть достаточно для чтения большинства тегов id3, мне интересно, почему Lua ведет себя таким образом (особенно потому, что это не при чтении больших текстовых файлов, таких как * .oj или * .ase). Есть ли объяснения для этого поведения или, возможно, решение для надежного чтения всего файла?
Вы в окнах? убедитесь, что вы открыли файл в двоичном режиме («rb» до io.open) – daurnimator
Argh, это был момент. Никогда раньше не приходилось использовать двоичный режим. Большое спасибо! –
Может кто-нибудь объяснить формат *** all ** в функции 'f: read (" * all ")'? Кажется, «все» равно «* а»? Я не мог найти документ в руководстве lua https://www.lua.org/manual/5.1/manual.html#pdf-file:read –