2014-09-02 46 views
2

我正在創建一個遊戲,並需要將gamedata寫入文件。我有遊戲創建文件,如果它不在那裏,並閱讀文件的內容(我手動),但我無法得到它寫入文件。電暈寫文件

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文檔複製的。我究竟做錯了什麼???

+2

'local myfile,err = io.open(path,「w」)'然後'print(err)'看看你得到了什麼錯誤。 – 2014-09-02 01:00:50

+0

權限被拒絕。所以這個文件是由應用程序創建的。這個錯誤發生在模擬器中。我還沒有在手機上測試過。 – 2014-09-02 11:39:22

回答

0

我找到了解決方案。我打開文件來閱讀文件是否存在。如果文件確實存在,我在if語句中重新打開它之前忘記再次關閉它。如果它不存在,我只關閉它。

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

錯誤的發生是由於在你的代碼行的錯誤:

myFile:close() 

因此,無論評論的路線爲:

--myFile:close() 

或者像下面這樣做(如果只有需要):

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

保留編碼............. :)

+0

我正在關閉文件,因爲我之前打開過它。然後我以「w」模式重新打開它。當我打開它爲「r」打開爲「w」後,我不需要關閉文件。 – 2014-09-02 10:11:57

+0

您正在條件 - >中寫入'file:close()',沒有這樣的文件。所以要麼在關閉之前創建文件,要麼避免關閉...... :) – 2014-09-02 18:12:41