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" (нулевое значение)

Я знаю, что файл находится в песочнице, и этот код был скопирован из документов Corona. Что я делаю неправильно???

3 ответа

Решение

Я нашел решение. Я открыл файл, чтобы прочитать, чтобы увидеть, существует ли файл. Я забыл закрыть его снова, прежде чем снова открыл его в операторе if, если файл действительно существует. Я только закрыл это, если это не существовало.

Вот две функции, которые я использую

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);

Наслаждайтесь!

Ошибка возникает из-за ошибки в вашей строке кода:

myFile:close()

Так что либо прокомментируйте строку как:

--myFile:close()

Или сделайте как ниже (только если вам нужно):

myFile = io.open(path, 'w')
myFile:close()

Продолжайте кодировать.............:)

Другие вопросы по тегам