lua中的讀寫文件

在用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返回的就是正規的函數,因此可以被反覆調用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章