macos - 无法在主目录中使用 io.open - Lua

标签 macos io lua

我正在编写一个 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/

相关文章:

iphone - 获取 NSFileWrapper 的路径

python - 无法在 mac OS X mountain lion 上导入 numpy

ios - 如何彻底重命名 Xcode 中的通用框架?

iphone - 如何添加授权以从新钥匙串(keychain)对应用程序进行代码签名,而无需任何人工交互

java - 外部文件存储在 arrayList 中的问题

lua - 将 lua 函数存储在队列中以便稍后执行

c - 如果Lua程序中出现错误,该错误会出现在堆栈顶部吗?

c# - 该进程无法访问该文件,因为它正被另一个使用 streamwriter 的进程使用

c++ - 二进制搜索树打印

lua - Corona SDK - 从 eventListener 调用实例方法或类方法