我正在编写一个 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 在我刚刚在用户主目录中创建的文件夹中创建文件的正确方法是什么?
我很感激我在这里犯了一个菜鸟错误,所以如果您在我身上浪费时间,我深表歉意。
最佳答案
您遇到 ~
的问题象征。在你的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") )
关于macos - 无法在主目录中使用 io.open - Lua,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495319/