在用lua做遊戲開發的時候,需要本地的保存一些遊戲的數據,以便在玩家登錄遊戲的時候,同步上次登錄的狀態信息,那麼就涉及到把遊戲中的數據保存在本地,接下來就對lua中的讀寫文件做一個總結:
1.打開文件
io.open (fn [, m]) 打開文件,返回文件句柄,fn文件名,m模式有:
r 以只讀方式打開文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
r+ 以可讀寫方式打開文件,該文件必須存在。
w+ 打開可讀寫文件,若文件存在則文件長度清爲零,即該文件內容會消失。若文件不存在則建立該文件。
a+ 與a類似,但此文件可讀可寫
b 二進制模式,如果文件是二進制文件,可以加上b
+ 號表示對文件既可以讀也可以寫
local fn = io.open(file,"r") --以只讀的方式打開文件,如果文件不存在,則爲nil
local fn1 = io.open(file,"w") --以只寫的方式打開文件
2.關閉文件
local fn = io.open(file,"r") --以只讀的方式打開文件
fn:close() --關閉上面打開的文件
3.讀取文件
local fn = io.open(file,"r") --以只讀的方式打開文件
if not fn then return end
local t = fn:read("*all") --讀取文件
if t then
local fc = loadstring(t)
if fc ~= nil then
fc()
end
end
--fn:read()有以下幾種方式:
--"*all" 讀取整個文件
--"*line" 讀取下一行
--"*number" 從串中轉換出一個數值
4.寫文件
local fn = io.open(file,"w") --以只讀的方式打開文件
if not fn then return end --判斷文件是否存在
fn:write(string.format("user=%q\n", user)) --寫入東西
fn:write("hello world")
fn:close() --寫入完畢之後,關閉文件
注意:
--讀文件(三步驟:打開文件,讀文件,關閉文件)
local fn = io.open(file,"r")
local t = fn:read("*all")
f:close()
--寫文件(三步驟:打開文件,寫文件,關閉文件)
local fn = io.open(file,"w")
fn:write("hello world")
f:close()
話說loadstring函數
Lua中還提供了另外一種動態執行Lua代碼的方式,即loadstring函數。顧名思義,相比於loadfile,loadstring的代碼源來自於其參數中的字符串,如:
f = loadstring(“i = i + 1”) --等價於 function f() i = i + 1 end
i = 0
f()
print(i) --將輸出1
f()
print(i) --將輸出2
對於loadstring返回的函數,如果需要對一個表達式求值,則必須在其之前添加return,這樣才能構成一條語句,返回表達式的值,如
i = 32
f = loadstring("i = i + 1; return i * 2")
print(f()) --輸出66
print(f()) --輸出68。由於loadstring返回的就是正規的函數,因此可以被反覆調用。