La lecture de l'intégralité des fichiers en Lua

Je suis en train de lire l'intégralité d'un fichier mp3 afin de pouvoir lire les tags id3. C'est quand j'ai remarqué que fichier:read ("*") ne semble pas lire le fichier, mais plutôt une petite partie. J'ai donc essayé de construire une sorte de solution de contournement afin d'obtenir le contenu de la totalité 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 testfile, ce qui montre que 256 de lecture opérations sont effectuées, la lecture d'un total de ~113kB (l'ensemble du fichier est d'environ 7MO). Bien que cela devrait être suffisant pour la lecture de la plupart des balises id3, je me demande pourquoi Lua se comporte de cette façon (surtout parce qu'il ne fonctionne pas lors de la lecture de gros fichiers texte *.jo ou *.ase). Est-il une explication à ce comportement ou peut-être une solution fiable pour lire le fichier en entier?

Êtes-vous sur de windows? assurez-vous d'ouvrir le fichier en mode binaire ("rb" io.ouvert)
Argh, qui était le point. N'a jamais eu à utiliser le mode binaire avant. Merci beaucoup!
Quelqu'un pourrait-il expliquer le format * en fonction f:read("*all") ? Il semble "*tous" est égal à "*"" ? Je ne pouvais pas trouver le document en lua manuel de lua.org/manual/5.1/manual.html#pdf-file:read
Tous les caractères après les deux premières (La *a) sont ignorés, selon cette réponse: stackoverflow.com/questions/47277203/... je suppose que j'ai obtenu ce à partir de ce chapitre dans pil à l'époque: lua.org/pil/21.1.html, l'avantage étant (je suppose) que vous n'avez pas à vous souvenir de ce *a, *n et *l, parce que vous pouvez au lieu de l'écrire.

OriginalL'auteur Henrik Ilgen | 2012-04-30