我正在编写一个Mac OS程序,我有以下几行: os.execute("cd ~/testdir")configfile = io.open("configfile.cfg", "w")configfile:write("hello")configfile:close() 问题是,它只在脚本当前目录中创建配置文件,而不是我刚
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") )