我正在制作游戏,需要将游戏数据写入文件。我有游戏创建文件,如果它不存在并读取文件的内容(我手动放入)但我无法写入文件。
local path = system.pathForFile("gameData.gameData", system.DocumentsDirectory)
local myFile
defaultGameData = "It Worked"
if (path) then
myFile = io.open(path, "r")
end
if(myFile) then
print('file')
else
myFile:close()
--io.close(myFile)
myFile = io.open(path, 'w')
myFile:write( "My Test" )
io.close(myFile)
end
myFile = nil
那部分有效。然后我移动到下一个场景并尝试写一些新的
local saveData = "My app state data"
local path = system.pathForFile("gameData.gameData", system.DocumentsDirectory)
local myfile = io.open( path, "w" )
myfile:write( saveData )
io.close( myfile )
但是得到错误
mainMenu.lua:43:尝试索引本地' myfile' (零值)
我知道该文件位于沙盒中,并且此代码是从电晕文档中复制的。我究竟做错了什么???
答案 0 :(得分:1)
这是我正在使用的两个功能
function SaveTable(t, filename)
local path = system.pathForFile( filename, system.DocumentsDirectory)
local file = io.open(path, "w")
if file then
local contents = JSON.encode(t)
file:write( contents )
io.close( file )
return true
else
return false
end
end
function LoadTable(filename, dir)
if (dir == nil) then
dir = system.DocumentsDirectory;
end
local path = system.pathForFile( filename, dir)
local contents = ""
local myTable = {}
local file = io.open( path, "r" )
if file then
-- read all contents of file into a string
local contents = file:read( "*a" )
myTable = JSON.decode(contents);
io.close( file )
return myTable
end
return nil
end
用法:
local t = {
text = "Sometext",
v = 23
};
SaveTable(t, "filename.json");
local u = LoadTable("filename.json");
print(u.text);
print(u.v);
享受!
答案 1 :(得分:1)
由于代码行中的错误而发生错误:
myFile:close()
所以要么将该行评论为:
--myFile:close()
或者如下所示(仅在您需要时):
myFile = io.open(path, 'w')
myFile:close()
保持编码.............:)
答案 2 :(得分:0)
我找到了解决方案。我打开文件阅读以查看文件是否存在。如果文件确实存在,我在if语句中重新打开之前忘了再次关闭它。如果它不存在我只会关闭它。