English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua I/La bibliothèque O est utilisée pour lire et traiter les fichiers. Elle est divisée en mode simple (comme C) et mode complet.
Le mode simple (simple model) possède un fichier d'entrée courant et un fichier de sortie courant, et fournit des opérations pertinentes pour ces fichiers.
Le mode complet (complete model) utilise des handles de fichier externes pour réaliser. Il définit toutes les opérations de fichier sous forme d'objets et de méthodes de handles de fichier
Le mode simple est plus approprié pour certaines opérations de fichier simples. Cependant, pour certaines opérations de fichier avancées, le mode complet est plus approprié. Par exemple, pour lire plusieurs fichiers en même temps, le mode complet est plus approprié.
L'opération d'ouverture de fichier est la suivante :
file = io.open (filename[, mode])
Les valeurs de mode sont :
Mode | Description |
---|---|
r | Ouvrir un fichier en mode lecture seule, le fichier doit exister. |
w | Ouvrir un fichier en mode écriture seule, si le fichier existe, la longueur du fichier est réinitialisée à zéro, c'est-à-dire que le contenu du fichier disparaîtra. Si le fichier n'existe pas, le fichier sera créé. |
a | Ouvrir un fichier en mode ajout, si le fichier n'existe pas, il sera créé. Si le fichier existe, les données écrites seront ajoutées à la fin du fichier, c'est-à-dire que le contenu précédent du fichier sera conservé. (EOF conservé) |
r+ | Ouvrir un fichier en mode lecture-écriture, le fichier doit exister. |
w+ | Ouvrir un fichier en mode lecture-écriture, si le fichier existe, la longueur du fichier est réinitialisée à zéro, c'est-à-dire que le contenu du fichier disparaîtra. Si le fichier n'existe pas, le fichier sera créé. |
a+ | Comme a, mais ce fichier peut être lu et écrit |
b | Mode binaire, si le fichier est un fichier binaire, vous pouvez ajouter b |
+ | Le symbole # indique que le fichier peut être lu et écrit |
Le mode simple utilise le standard I/Ou utiliser un fichier d'entrée actuel et un fichier de sortie actuel.
Voici le code du fichier file.lua, le fichier manipulé est test.lua (si vous n'en avez pas, vous devez le créer), le code est le suivant :
-- 文件打开只读方式 file = io.open("test.lua", "r") -- Définir le fichier d'entrée par défaut comme test.lua io.input(file) -- Afficher la première ligne du fichier print(io.read()) -- 文件打开的关闭 io.close(file) -- Ouvrir un fichier binaire en mode ajout file = io.open("test.lua", "a") -- Définir le fichier de sortie par défaut comme test.lua io.output(file) -- Ajouter un commentaire Lua en dernière ligne du fichier io.write("-- Commentaire à la fin du fichier test.lua") -- 文件打开的关闭 io.close(file)
En exécutant le code ci-dessus, vous verrez que les informations de la première ligne du fichier test.lua ont été affichées et un commentaire Lua a été ajouté en dernière ligne du fichier. Par exemple, voici ce que j'obtiens de mon côté :
-- Fichier test.lua
Dans les exemples ci-dessus, nous avons utilisé la méthode io."x". Dans io.read(), nous n'avons pas de paramètres, mais les paramètres peuvent être l'un des éléments du tableau suivant :
Mode | Description |
---|---|
"*n" | Lire un nombre et le retourner. Exemple : file.read("*n) |
"*a" | Lire tout le fichier à partir de la position actuelle. Exemple : file.read("*a") |
"*l" (par défaut) | Lecture de la ligne suivante, retourne nil à la fin du fichier (EOF). Exemple : file.read("*l") |
number | Retourne une chaîne de caractères d'une longueur spécifiée ou nil à la fin du fichier (EOF). Exemple : file.read("5) |
D'autres méthodes io incluent :
io.tmpfile():Retourne un descripteur de fichier temporaire, le fichier est ouvert en mode mise à jour et est automatiquement supprimé à la fin du programme
io.type(file): Vérifie si obj est un descripteur de fichier disponible
io.flush(): 所有数据缓冲中的向文件写入
io.lines(optional file name): Retourne une fonction itérative qui fournit une ligne du fichier à chaque appel. Lorsque le fichier est terminé, il retourne nil, mais ne ferme pas le fichier
Nous devons généralement traiter plusieurs fichiers en même temps. Nous devons utiliser file:function_name à la place de la méthode io.function_name. Voici un exemple qui montre comment traiter le même fichier en même temps :
-- 文件打开只读方式 file = io.open("test.lua", "r") -- Afficher la première ligne du fichier print(file:read()) -- 文件打开的关闭 file:close() -- Ouvrir un fichier binaire en mode ajout file = io.open("test.lua", "a") -- Ajouter un commentaire Lua en dernière ligne du fichier file:write("--test) -- 文件打开的关闭 file:close()
En exécutant le code ci-dessus, vous verrez que les informations de la première ligne du fichier test.ua ont été affichées et un commentaire Lua a été ajouté en dernière ligne du fichier. Par exemple, voici ce que j'obtiens de mon côté :
-- Fichier test.lua
Les paramètres de read sont identiques au mode simple.
其他方法:
file:seek(optional whence, optional offset): 设置和获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息。参数 whence 值可以是:
不带参数file:seek()则返回当前位置,file:seek("set")则定位到文件头,file:seek("end")则定位到文件尾并返回文件大小
"set": 从文件头开始
"cur": 从当前位置开始[默认]
"end": 从文件尾开始
offset:默认为0
file:flush(): 所有数据缓冲中的向文件写入
io.lines(optional file name): 打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件。
不带参数时io.lines() io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件,如:
for line in io.lines("main.lua") do print(line) end
以下示例使用了 seek 方法,定位到文件倒数第 25 个位置并使用 read 方法的 *参数 a,即从当期位置(倒数第 25 个位置)读取整个文件。
-- 文件打开只读方式 file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- 文件打开的关闭 file:close()
结果输出的这边是:
st.lua 文件末尾--test