加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

macos – 不能在主目录中使用io.open – Lua

发布时间:2020-12-14 21:43:28 所属栏目:大数据 来源:网络整理
导读:我正在编写一个Mac OS程序,我有以下几行: os.execute("cd ~/testdir")configfile = io.open("configfile.cfg","w")configfile:write("hello")configfile:close() 问题是,它只在脚本当前目录中创建配置文件,而不是我刚刚进入的文件夹.我意识到这是因为我使用
我正在编写一个Mac OS程序,我有以下几行:

os.execute("cd ~/testdir")
configfile = io.open("configfile.cfg","w")
configfile:write("hello")
configfile:close()

问题是,它只在脚本当前目录中创建配置文件,而不是我刚刚进入的文件夹.我意识到这是因为我使用控制台命令来更改目录,然后指示Lua代码来编写文件.为了解决这个问题,我将代码更改为:

configfile = io.open("~/testdir/configfile.cfg","w")

但是我得到以下结果:

lua: ifontinst.lua:22: attempt to index global 'configfile' (a nil value)
stack traceback:
ifontinst.lua:22: in main chunk

我的问题是,使用IO.Open在我刚刚在用户主目录中创建的文件夹中创建文件的正确方法是什么?

我很欣赏我在这里犯了一个新手的错误,所以如果你浪费你的时间我会道歉.

解决方法

你有?符号的问题.在你的os.execute(“cd~ / testdir”)中是shell解释符号并用你的主路径替换它.但是,在io.open(“?/ testdir / configfile.cfg”,“w”)中,Lua接收字符串并且Lua不解释此符号,因此您的程序会尝试在不正确的文件夹中打开文件.一个简单的解决方案是调用os.getenv(“HOME”)并将路径字符串与文件路径连接:

configfile = io.open(os.getenv("HOME").."/testdir/configfile.cfg","w")

为了改进错误消息,我建议你使用assert()函数包装io.open():

configfile = assert( io.open(os.getenv("HOME").."/testdir/configfile.cfg","w") )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读