Lua文件读写详解

这篇文章主要介绍了Lua文件读写详解,本文讲解了文件读写的简单模型和完整模型,并给出了一个操作示例,需要的朋友可以参考下

  lua里的文件读写模型来自C语言,分为完整模型(和C一样)、简单模型。

1、简单模型

  io.input([file])  设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为把柄,有了把柄就可以找到文件),返回文件句柄。

  io.output([file]) 设置默认的输出文件,参数意义同上。

  io.close([file]) 关闭文件,不带参数关闭默认的文件

  io.read(formats) 读入默认文件,formats取值为"*a"(读入全部)、“*n”(按数字读入)、  "*l"(按行读入,默认方式)、n(即数字,读取n个字符)。

  io.lines([fn]) fn文件名,若无文件,取默认文件,返回一个迭代器,可以用在for循环里。

  io.write(value)向默认文件写入内容。

  io.flush() 把文件缓存里的操作立即作用到默认输出文件。

  例子在最后。

2、完整模型

  简单模型里只能处理文本类型的文件,在完整模型里可以处理二进制文件。

  处理文件的一般流程为:打开文件,获取文件的句柄;以文件句柄操作文件;关闭文件。

  可以看到完整模型比简单模型复杂点,但优点是功能更强大。

  io.open (fn [, m]) 打开文件,返回文件句柄,fn文件名,m模式有:

  r 以只读方式打开文件,该文件必须存在。

  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

  r+ 以可读写方式打开文件,该文件必须存在。

  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

  a+ 与a类似,但此文件可读可写

  b 二进制模式,如果文件是二进制文件,可以加上b

  + 号表示对文件既可以读也可以写

  以下的file是io.open返回的文件句柄,功能与简单模式类似,不再详述。

  file :close ()

  file :read ( formats )

  file :lines ()

  file :write ( values )

  file :seek ([p] [, of])  设置文件读写的偏移,p文件偏移起始位置(取值有"set",文件头,此为默认值,"cur"当前位置、"end"文件尾),of偏移量(默认值0,正的表示向前,负的表示向后),返回在文件里新的当前位置。

  file :flush ()

  3、示例

  复制代码 代码如下:

  ------------------简单模型-----------------

  --读

  local file1=io.input("1.txt") --当前目录"1.txt"要存在,不然出错

  local str=io.read("*a")

  print(str)

  --写

  local file2=io.output("2.txt") --当前目录"2.txt"不需要存在

  io.write(str)

  io.flush()

  io.close()

  --利用这几个函数可以做一个文件复制的函数

  function copy(fileA,fileB)

  local file1=io.input(fileA)

  if not file1 then print(fileA.."不存在") return end

  local str=io.read("*a")

  local file2=io.output(fileB)

  io.write(str)

  io.flush()

  io.close()

  end

  for line in io.lines("1.txt") do

  print(line)

  end

  ------------------完整模型-----------------

  local f=io.open("3.txt","a+")

  f:write("Happy New Year!")

  f:flush()

  f:seek("end",-1) --定位到文件末尾前一个字节

  local str=f:read(1) --读取一个字符

  print(str) --输出"!"

  f:close()

 

jb51.net/article/64424.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Lua是一种轻量级的脚本语言,因其简单易学、灵活高效而广泛应用于游戏开发和嵌入式系统。在Lua中,读写INI文件可以通过库函数实现。 要读取INI文件,可以使用Luaio库中的open函数打开文件,然后通过读取每一行的方式来解析INI文件的内容。在解析每一行时,可以通过检测方括号([])来确定INI文件中的段落,将段落作为表的键,然后将每个键值对都保存到表中。 在Lua中,可以使用字符串函数来处理INI文件中的每一行。通过查找等号(=)来确定键值对的分隔,然后使用sub函数来提取键和值。接下来,将键和值插入到表中,可以使用table.insert函数或直接通过索引赋值的方式实现。 要写入INI文件,首先需要创建一个新的文件,可以使用io.open函数打开文件,并指定"w"模式。然后,可以通过table来保存要写入INI文件的内容。可以将INI文件内容存储在一个Lua的表中,每个键将作为表的一个索引,对应的值将作为表的元素存储。 为了将表中的数据写入INI文件,可以使用io.write函数将每个键值对格式化为字符串,并使用"\n"换行符将每一行数据写入文件。最后,使用io.close函数关闭文件。 总之,Lua可以通过io库中的函数实现INI文件的读写。对于读取INI文件,可以使用open函数打开文件,然后解析每一行的内容并保存到表中。对于写入INI文件,可以使用write函数将表中的数据格式化为字符串,并将数据写入到文件中。 ### 回答2: Lua是一种脚本语言,具有简单、高效的特点,因此在读写ini文件方面也有很好的支持。 在Lua中,我们可以使用io库来读写文件。下面是一个简单的示例,演示了如何使用Lua读取ini文件中的数据: ```lua -- 打开文件 local file = io.open("config.ini", "r") -- 定义一个空表来存储ini文件中的数据 local configData = {} -- 逐行读取文件 for line in file:lines() do -- 忽略注释行和空行 if not line:match("^%s*[;%[]") then -- 使用等号将每行的key和value分隔开 local key, value = line:match("^%s*(.-)%s*=%s*(.-)%s*$") -- 将key和value存入configData表中 if key and value then configData[key] = value end end end -- 关闭文件 file:close() -- 输出读取到的ini文件数据 for key, value in pairs(configData) do print(key, value) end ``` 上述代码首先使用io库中的`io.open`函数打开了一个名为"config.ini"的ini文件,并以只读模式打开。然后,通过使用文件对象的`lines`方法,我们可以逐行读取文件内容。每行我们都会进行一些处理,如忽略注释行和空行。对于非注释行,我们使用正则表达式将每行的key和value分隔开,并将其存入一个名为configData的表中。最后,通过遍历configData表,我们可以输出读取到的ini文件数据。 在写入ini文件方面,Lua也有很好的支持。我们可以使用io库的文件写入功能来实现。下面是一个简单的示例,演示了如何使用Lua数据写入ini文件中: ```lua -- 定义需要写入的数据 local configData = { key1 = "value1", key2 = "value2", key3 = "value3" } -- 打开文件 local file = io.open("config.ini", "w") -- 遍历configData表,将数据写入文件 for key, value in pairs(configData) do file:write(key .. " = " .. value .. "\n") end -- 关闭文件 file:close() ``` 上述代码首先定义了一个名为configData的表,其中包含了要写入config.ini文件的数据。然后,我们通过使用`io.open`函数以写模式打开了文件。接下来,通过遍历configData表,将每个key和value以key = value的形式写入文件,并添加换行符。最后,使用`file:close()`方法关闭文件。 总结起来,Lua中通过使用io库来读写ini文件是相对简单的。对于读取,我们可以使用文件对象的`lines`方法逐行读取文件内容,并根据需要提取出key和value。对于写入,我们可以使用文件对象的`write`方法将key和value写入文件。 ### 回答3: Lua 是一种通用的轻量级脚本语言,常用于嵌入式系统和游戏开发中。在 Lua 中读写 ini 文件可以通过使用一些库函数实现。 对于读取 ini 文件,可以使用 Luaio 库函数来打开 ini 文件并逐行读取其中的内容。可以使用 io.open() 函数打开 ini 文件,并使用 io.lines() 函数来逐行读取文件内容。然后可以使用字符串操作函数来解析 ini 文件中的键值对。 对于写入 ini 文件,可以使用 io 库函数来创建一个新的 ini 文件,并使用 io.write() 函数来写入内容。可以先将需要写入的键值对进行组装,然后使用 io.write() 函数将其写入 ini 文件中。 以下是一个简单的示例,演示了如何读写 ini 文件: 读取 ini 文件: ```lua local filename = "config.ini" local file = io.open(filename, "r") if file then for line in file:lines() do -- 解析 line 中的键值对 end file:close() end ``` 写入 ini 文件: ```lua local filename = "config.ini" local file = io.open(filename, "w") if file then -- 组装要写入的键值对 local content = "[Section]\nKey=Value" -- 将 content 写入 ini 文件 file:write(content) file:close() end ``` 请注意,在实际应用中,还需要考虑更多的细节,比如处理注释、空行和特殊字符等。同时,也可以使用第三方库来简化 ini 文件的读写操作,比如 lua-ini。这个库提供了更丰富的功能和更方便的接口来读写 ini 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值