web-dev-qa-db-fra.com

Lire des fichiers entiers à Lua

J'essaie de lire un fichier MP3 complet afin de lire les balises ID3. C'est quand j'ai remarqué que le fichier: lire ("* A") ne lit apparemment pas le fichier complet mais plutôt une petite partie. J'ai donc essayé de construire une sorte de solution de contournement afin d'obtenir le contenu de l'ensemble du fichier:

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

pour mon fichier TestFile, cela montre que 256 opérations de lecture sont effectuées, en lisant un total de ~ 113kb (l'ensemble du fichier est de ~ 7 Mo). Bien que cela soit suffisant pour lire la plupart des tags ID3, je me demande pourquoi Lua se comporte de cette manière (surtout parce que cela ne lisait pas de gros fichiers à base de texte tels que * .OJ ou * .ase). Existe-t-il une explication de ce comportement ou peut-être une solution pour lire de manière fiable le fichier entier?

18
Henrik Ilgen

Je dois manquer quelque chose mais je ne vois pas pourquoi une boucle est nécessaire. Cela devrait fonctionner (mais vous feriez mieux d'ajouter une erreur d'erreur au cas où le fichier ne peut pas être ouvert):

function readAll(file)
    local f = assert(io.open(file, "rb"))
    local content = f:read("*all")
    f:close()
    return content
end
52
lhf