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()
Продолжайте кодировать.............:)