在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
I/O 库提供了两套不同风格的文件处理接口。 第一种风格使用隐式的文件句柄; 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件。 第二种风格使用显式的文件句柄。 当使用隐式文件句柄时, 所有的操作都由表 io 提供。 若使用显式文件句柄, io.open 会返回一个文件句柄,且所有的操作都由该文件句柄的方法来提供。 表 io 中也提供了三个 和 C 中含义相同的预定义文件句柄: io.stdin io.stdout io.stderr。 I/O 库永远不会关闭这些文件。 除非另有说明, I/O 函数在出错时都返回 nil (第二个返回值为错误消息,第三个返回值为系统相关的错误码)。 成功时返回与 nil 不同的值 io:open(filename [, mode])这个函数用字符串 mode 指定的模式打开一个文件。 返回新的文件句柄。 当出错时,返回 nil 加错误消息。
mode 字符串可以在最后加一个 'b' , 这会在某些系统上以二进制方式打开文件。 当文件不存在时
模式"r","r+",会提示错误,这两种模式不会自动创建为难。 当文件存在时
lua文件:
对不同模式,分别调用读写操作
Output:
写:
nil Bad file descriptor 9
文件可读,不可写
Output :
true
文件内容:
123a is test 1
this is test 2
文件内容保留,新内容从文件头输入
Output :
true
文件内容:
123a
读:
nil No error 0
用输入内容覆盖文件内容
Output:
true
文件内容:
123a
用输入内容覆盖文件内容
Output:
true
文件内容:
this is test 1
this is test 2123a
读:
nil No error 0
追加模式写入
Output:
true
文件内容:
this is test 1
this is test 2123a
追加模式写入 io:input([file])用文件名调用它时,(以文本模式)来打开该名字的文件, 并将文件句柄设为默认输入文件。 如果用文件句柄去调用它, 就简单的将该句柄设为默认输入文件。 如果调用时不传参数,它返回当前的默认输入文件。
io:output([file])用文件名调用它时,(以文本模式)来打开该名字的文件, 并将文件句柄设为默认输出文件。 如果用文件句柄去调用它, 就简单的将该句柄设为默认输出文件。 如果调用时不传参数,它返回当前的默认输出文件。
io.popen (prog [, mode])这个函数和系统有关,不是所有的平台都提供。 用一个分离进程开启程序 prog, 返回的文件句柄可用于从这个程序中读取数据 (如果 mode 为 "r",这是默认值) 或是向这个程序写入输入(当 mode 为 "w" 时)。 io.tmpfile()返回一个临时文件的句柄。 这个文件以更新模式打开,在程序结束时会自动删除。 io.type(obj)检查 obj 是否是合法的文件句柄。 如果 obj 它是一个打开的文件句柄,返回字符串 "file"。 如果 obj 是一个关闭的文件句柄,返回字符串 "closed file"。 如果 obj 不是文件句柄,返回 nil 。
io.lines([filename])提供一个循环迭代器以遍历文件,如果指定了文件名则当遍历结束后将自动关闭该文件;若使用默认文件,则遍历结束后不会自动关闭文件。
注:Lua 5.3 有变动,添加模式数 file:lines()返回一个迭代器函数, 每次调用迭代器时,都从文件中取一行数据,和 io.lines 不同, 这个函数在循环结束后不会关闭文件。 file:read(...)读文件 file, 指定的格式决定了要读什么。 对于每种格式,函数返回读出的字符对应的字符串或数字。 若不能以该格式对应读出数据则返回 nil。 (对于最后这种情况, 函数不会读出后续的格式。) 当调用时不传格式,它会使用默认格式读下一行
注:Lua 5.3 有变动,去掉*号,并添加"i"和"L"格式 io:read(...)等价于 io.input():read(···)。 file:write(...)将参数的值逐个写入 file。 参数必须是字符串或数字。 io:write(...)等价于 io.output():write(···)。 file:close()关闭 file。 注意,文件在句柄被垃圾回收时会自动关闭, 但是多久以后发生,时间不可预期的。 io:close()等价于 file:close()。 不给出 file 时将关闭默认输出文件。 file:flush()将写入的数据保存到 file 中 io:flush()等价于 io.output():flush()。 file:seek([whence [, offset]])设置及获取基于文件开头处计算出的位置。 设置的位置由 offset 和 whence 字符串 whence 指定的基点决定。基点可以是:
当 seek 成功时,返回最终从文件开头计算起的文件的位置。 当 seek 失败时,返回 nil 加上一个错误描述字符串。 whence 的默认值是 "cur", offset 默认为 0 。 因此,调用 file:seek() 可以返回文件当前位置,并不改变它; 调用 file:seek("set") 将位置设为文件开头(并返回 0); 调用 file:seek("end") 将位置设到文件末尾,并返回文件大小。
修改文件的值会影响read操作 以及以"r+"模式打开文件的write操作 |
请发表评论