我正在编写Mac OS程序,我有以下几行:
os.execute("cd ~/testdir")
configfile = io.open("configfile.cfg", "w")
configfile:write("hello")
configfile:close()
问题是,它只在脚本当前目录中创建配置文件,而不是我只有cd'成。我意识到这是因为我使用控制台命令来更改目录,然后指示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在我刚刚在用户主目录中创建的文件夹中创建文件的正确方法是什么?
我很感激我在这里犯了一个新手的错误,所以如果你把时间花在我身上,我会道歉。
答案 0 :(得分:5)
您遇到~
符号问题。在你的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")
为了改进错误消息,我建议您使用io.open()
函数包裹assert()
:
configfile = assert( io.open(os.getenv("HOME").."/testdir/configfile.cfg", "w") )