在 iOS 上使用 Lua 的 io.open 函数时出现访问被拒绝的错误。

我在 iOS 上使用 Lua 时遇到了问题,无法使用 io.open("filename.txt","w") 打开文件,总是会得到 "Permission denied" 错误。 我知道 Lua 在读写时需要完整的文件路径,但移动操作系统(如 iOS)通过“沙盒”实现了文件系统的保护。 我该如何解决这个问题?

注意:我没有使用 Corona SDK。

点赞
用户451475
用户451475

在 Lua 中:当打开文件进行写入时,必须在 system.pathForFile() 函数中指定 system.DocumentsDirectory、system.TemporaryDirectory 或 system.CachesDirectory 参数。请参见 io.open()。

请查看 Corona Docs 中的 object:write()。

在 iOS 上,用户数据通常存储在文档目录中。

在 iOS 上,没有应用程序具有 root 访问权限,这是一项安全功能,并由沙盒强制执行。

注意:我对 Corona/Lua 一无所知,简单的谷歌“Lua ios documents directory”找到了上述文档。先谷歌,再提问。

2014-05-31 19:48:24
用户1472151
用户1472151

只要通过 system.pathForFile("file.txt", directory_enum) 获取路径(其中 directory_enum 可以是 system.DocumentsDirectorysystem.ResourceDirectory 等等),文件路径就将相对于正确的沙盒文件夹。

否则,即使我正在使用 Corona,我也会遇到同样的“权限被拒绝”问题。问题是,在返回错误的 io.open 调用之前,我还有另一个 io.open 调用,本应读取相同的文件,但是该文件句柄在此后没有关闭。

因此,简单地说:

io.open(path, "r")
...
io.open(path, "w") --ERROR! this one returns a nil handle and a "permission denied"!

要解决这个问题,请执行以下操作:

local fh = io.open(path, "r")
...
io.close(fh) --关闭文件
...
io.open(path, "w") --现在文件已关闭,可以打开它了
2014-07-22 12:38:27