为什么 Lua 函数 io.write() 不起作用?它只在终端上显示结果,而不是写入文件
2021-4-25 7:53:5
收藏:0
阅读:377
评论:3
我正在学习 Lua IO 库。我遇到了 io.write() 的问题。在《程序设计与 Lua》中,有一段代码逐行迭代文件,并在每行前面加上一个序号。 这是我正在工作的文件:
这是我的代码
io.input("iotest.txt")
-- io.output("iotest.txt")
local count = 0
for line in io.lines() do
count=count+1
io.write(string.format("%6d ",count), line, "\n")
end
这是终端显示的结果,但是这个结果无法写入文件,无论我是否添加 IO.Output(" iotest.txt ")。
这是文件的结果,我们可以看到没有改变
点赞
用户2858170
只需在写操作后添加 io.flush() 将数据保存到文件中。
io.input("iotest.txt")
io.output("iotestout.txt")
local count = 0
for line in io.lines() do
count=count+1
io.write(string.format("%6d ",count), line, "\n")
end
io.flush()
io.close()
请参考 Lua 5.4 参考手册:6.8 - 输入和输出设施
io.flush() 将保存您使用 io.output 设置的任何写入数据到输出文件。
在 koyaanisqatsi 的回答中,可以选择使用文件句柄。如果您同时处理多个文件,这将变得特别有用,并且可以更好地控制如何与文件交互。
话虽如此,您还应该针对输入和输出分别拥有不同的文件。您会同意交替地从同一个文件中读取和写入是没有意义的。
2021-04-25 08:51:52
用户1867654
错误信息
你试图同时以读写方式打开相同的文件。这是不允许的。
解决方法
以下有两种可能的解决方法:
- 从文件X中读取,遍历它并将结果写入另一个文件Y。
- 将完整文件X读入内存,关闭文件X,然后删除文件X,打开相同的文件名以写入并在原始文件(在内存中)遍历时写入。
除此之外,你的方法是正确的,尽管在Lua中文件操作更常使用io.open()和文件句柄而不是io.write()和io.read()。
2021-04-27 12:54:04
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

写入文件需要用到文件句柄。
该句柄来自于:
io.open()请见:https://www.lua.org/manual/5.4/manual.html#6.8
文件句柄有用于自身的方法。
即在文件句柄后面的函数
:。所以,
io.write()输出到标准输出,而file:write()则输出到文件。以下是一个可以将定义好的函数导出到文件的示例函数...
fdump=function(func,path) assert(type(func)=="function") assert(type(path)=="string") -- 获取文件句柄(文件) local file,err = io.open(path, "wb") assert(file, err) local chunk = string.dump(func,true) file:write(chunk) file:flush() file:close() return 'DONE' end下面是方法,来自于
io.stdinclose = function: 0x566032b0 seek = function: 0x566045f0 flush = function: 0x56603d10 setvbuf = function: 0x56604240 write = function: 0x56603e70 lines = function: 0x566040c0 read = function: 0x56603c90这使我们直接使用它变得可能,例如...
( Lua控制台:lua -i )
> do io.stdout:write('Input: ') local result=io.stdin:read() return result end Input: d d