E/S de fichier Lua
Bibliothèque d'E/S Lua pour la lecture et le traitement de fichiers. Il est divisé en mode simple (identique à C) et en mode complet.
Le modèle simple a un fichier d'entrée actuel et un fichier de sortie actuel, et fournit des opérations liées à ces fichiers.
Le modèle complet est implémenté à l'aide de descripteurs de fichiers externes. Il définit toutes les opérations sur les fichiers en tant que méthodes de gestion de fichiers sous une forme orientée objet
Le mode simple est plus approprié pour effectuer certaines opérations simples sur les fichiers. Mais lors de l’exécution de certaines opérations avancées sur les fichiers, le mode simple semble inadéquat. Par exemple, pour des opérations telles que la lecture de plusieurs fichiers en même temps, il est plus approprié d'utiliser le mode complet.
L'instruction d'opération d'ouverture du fichier est la suivante :
file = io.open (filename [, mode])
La valeur de mode est :
模式 | 描述 |
---|---|
r | 以只读方式打开文件,该文件必须存在。 |
w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
r+ | 以可读写方式打开文件,该文件必须存在。 |
w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a+ | 与a类似,但此文件可读可写 |
b | 二进制模式,如果文件是二进制文件,可以加上b |
+ | 号表示对文件既可以读也可以写 |
Mode simple
Le mode simple utilise des E/S standard ou utilise un fichier d'entrée actuel et un fichier de sortie actuel.
Voici le code du fichier file.lua. Le fichier à exploiter est test.lua (vous devez créer ce fichier s'il n'existe pas. Le code est le suivant :
-- 以只读方式打开文件 file = io.open("test.lua", "r") -- 设置默认输入文件为 test.lua io.input(file) -- 输出文件第一行 print(io.read()) -- 关闭打开的文件 io.close(file) -- 以附加的方式打开只写文件 file = io.open("test.lua", "a") -- 设置默认输出文件为 test.lua io.output(file) -- 在文件最后一行添加 Lua 注释 io.write("-- test.lua 文件末尾注释") -- 关闭打开的文件 io.close(file)<). 🎜>Exécutez le code ci-dessus et vous constaterez que la sortie La première ligne d'informations du fichier test.ua est modifiée et le commentaire lua est ajouté à la dernière ligne du fichier. Par exemple, le résultat ici est :
-- test.lua 文件Dans l'exemple ci-dessus, nous avons utilisé la méthode io."x", dans laquelle nous n'avons pas pris de paramètres dans io.read(). les tableaux suivants :
Les autres méthodes io sont :
io.tmpfile() :Renvoie un descripteur de fichier temporaire. Le fichier est ouvert en mode mise à jour et automatiquement lorsque le programme. se termine. Supprimer
io.type(file): Vérifiez si obj est un descripteur de fichier disponible
io .flush() : Écrit toutes les données du tampon dans le fichier
io.lines (nom de fichier facultatif) : Renvoie un itératif fonction, chaque Cet appel obtiendra une ligne de contenu dans le fichier Lorsque la fin du fichier sera atteinte, nul sera renvoyé, mais le fichier ne sera pas fermé
<🎜. >Mode completHabituellement, nous avons besoin de traiter plusieurs fichiers en même temps. Nous devons utiliser la méthode file:function_name au lieu de la méthode io.function_name. L'exemple suivant montre comment traiter le même fichier en même temps :
-- 以只读方式打开文件 file = io.open("test.lua", "r") -- 输出文件第一行 print(file:read()) -- 关闭打开的文件 file:close() -- 以附加的方式打开只写文件 file = io.open("test.lua", "a") -- 在文件最后一行添加 Lua 注释 file:write("--test") -- 关闭打开的文件 file:close()Exécutez le code ci-dessus, vous constaterez que la première ligne d'informations du fichier test.ua est affichée et que le commentaire lua est ajouté à la dernière ligne du fichier. Par exemple, le résultat ici est :
-- test.lua 文件Les paramètres de lecture sont cohérents avec le mode simple. Autres méthodes :
file:seek(facultatif d'où, facultatif offset) : Définissez et obtenez la position actuelle du fichier, et renvoyez la position finale en cas de succès Emplacement du fichier (en octets), renvoie zéro plus un message d'erreur en cas d'échec. La valeur du paramètre d'où peut être :
Sans paramètre file:seek() renvoie la position actuelle, file:seek("set") localise l'en-tête du fichier, file:seek("end") localise la fin du fichier et renvoie la taille du fichier- "set": Commencer au début du fichier
- "cur": Commencer à partir de la position actuelle [Par défaut]
- "end" : Commencer à partir de la fin du fichier
- offset : La valeur par défaut est 0
file:flush(): Écrivez toutes les données du tampon dans le fichier
io.lines(nom de fichier facultatif) : Ouvrez le nom de fichier spécifié en mode lecture et renvoyez une fonction itérative. Chaque appel obtiendra une ligne de contenu dans le fichier. Lorsque la fin du fichier est atteinte, zéro sera. retourné et le dossier sera automatiquement fermé. Si aucun paramètre n'est utilisé, io.lines() <=> io.input():lines(); lit le contenu du périphérique d'entrée par défaut, mais ne ferme pas le fichier à la fin, comme
for line in io.lines("main.lua") do print(line) end
-- 以只读方式打开文件 file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- 关闭打开的文件 file:close()Le résultat de sortie ici est :
st.lua 文件末尾--test