Corona写一个文件

时间:2014-09-02 00:19:11

标签: lua save corona

我正在制作游戏,需要将游戏数据写入文件。我有游戏创建文件,如果它不存在并读取文件的内容(我手动放入)但我无法写入文件。

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' (零值)

我知道该文件位于沙盒中,并且此代码是从电晕文档中复制的。我究竟做错了什么???

3 个答案:

答案 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语句中重新打开之前忘了再次关闭它。如果它不存在我只会关闭它。