日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua 文件 I/O

發(fā)布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua 文件 I/O 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Lua I/O 庫用于讀取和處理文件。分為簡單模式(和C一樣)、完全模式。

  • 簡單模式(simple model)擁有一個當(dāng)前輸入文件和一個當(dāng)前輸出文件,并且提供針對這些文件相關(guān)的操作。
  • 完全模式(complete model) 使用外部的文件句柄來實現(xiàn)。它以一種面對對象的形式,將所有的文件操作定義為文件句柄的方法

簡單模式在做一些簡單的文件操作時較為合適。但是在進(jìn)行一些高級的文件操作的時候,簡單模式就顯得力不從心。例如同時讀取多個文件這樣的操作,使用完全模式則較為合適。

打開文件操作語句如下:

file = io.open (filename [, mode])

mode 的值有:

模式描述
r以只讀方式打開文件,該文件必須存在。
w打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在則建立該文件。
a以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留。(EOF符保留)
r+以可讀寫方式打開文件,該文件必須存在。
w+打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在則建立該文件。
a+與a類似,但此文件可讀可寫
b二進(jìn)制模式,如果文件是二進(jìn)制文件,可以加上b
+號表示對文件既可以讀也可以寫

簡單模式

簡單模式使用標(biāo)準(zhǔn)的 I/O 或使用一個當(dāng)前輸入文件和一個當(dāng)前輸出文件。

以下為 file.lua 文件代碼,操作的文件為test.lua(如果沒有你需要創(chuàng)建該文件),代碼如下:

-- 以只讀方式打開文件 file = io.open("test.lua", "r")-- 設(shè)置默認(rèn)輸入文件為 test.lua io.input(file)-- 輸出文件第一行 print(io.read())-- 關(guān)閉打開的文件 io.close(file)-- 以附加的方式打開只寫文件 file = io.open("test.lua", "a")-- 設(shè)置默認(rèn)輸出文件為 test.lua io.output(file)-- 在文件最后一行添加 Lua 注釋 io.write("-- test.lua 文件末尾注釋")-- 關(guān)閉打開的文件 io.close(file)

執(zhí)行以上代碼,你會發(fā)現(xiàn),輸出了 test.ua 文件的第一行信息,并在該文件最后一行添加了 lua 的注釋。如我這邊輸出的是:

-- test.lua 文件

在以上實例中我們使用了 io."x" 方法,其中 io.read() 中我們沒有帶參數(shù),參數(shù)可以是下表中的一個:

模式描述
"*n"讀取一個數(shù)字并返回它。例:file.read("*n")
"*a"從當(dāng)前位置讀取整個文件。例:file.read("*a")
"*l"(默認(rèn))讀取下一行,在文件尾 (EOF) 處返回 nil。例:file.read("*l")
number返回一個指定字符個數(shù)的字符串,或在 EOF 時返回 nil。例:file.read(5)

其他的 io 方法有:

  • io.tmpfile():返回一個臨時文件句柄,該文件以更新模式打開,程序結(jié)束時自動刪除

  • io.type(file):?檢測obj是否一個可用的文件句柄

  • io.flush():?向文件寫入緩沖中的所有數(shù)據(jù)

  • io.lines(optional file name):?返回一個迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r,將返回nil,但不關(guān)閉文件


完全模式

通常我們需要在同一時間處理多個文件。我們需要使用 file:function_name 來代替 io.function_name 方法。以下實例演示了如何同時處理同一個文件:

-- 以只讀方式打開文件 file = io.open("test.lua", "r")-- 輸出文件第一行 print(file:read())-- 關(guān)閉打開的文件 file:close()-- 以附加的方式打開只寫文件 file = io.open("test.lua", "a")-- 在文件最后一行添加 Lua 注釋 file:write("--test")-- 關(guān)閉打開的文件 file:close()

執(zhí)行以上代碼,你會發(fā)現(xiàn),輸出了 test.ua 文件的第一行信息,并在該文件最后一行添加了 lua 的注釋。如我這邊輸出的是:

-- test.lua 文件

read 的參數(shù)與簡單模式一致。

其他方法:

  • file:seek(optional whence, optional offset):?設(shè)置和獲取當(dāng)前文件位置,成功則返回最終的文件位置(按字節(jié)),失敗則返回nil加錯誤信息。參數(shù) whence 值可以是:

    • "set": 從文件頭開始
    • "cur": 從當(dāng)前位置開始[默認(rèn)]
    • "end": 從文件尾開始
    • offset:默認(rèn)為0
    不帶參數(shù)file:seek()則返回當(dāng)前位置,file:seek("set")則定位到文件頭,file:seek("end")則定位到文件尾并返回文件大小
  • file:flush():?向文件寫入緩沖中的所有數(shù)據(jù)

  • io.lines(optional file name):?打開指定的文件filename為讀模式并返回一個迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r,將返回nil,并自動關(guān)閉文件。
    若不帶參數(shù)時io.lines() <=> io.input():lines(); 讀取默認(rèn)輸入設(shè)備的內(nèi)容,但結(jié)束時不關(guān)閉文件,如

    for line in io.lines("main.lua") doprint(line)end

    ?

以下實例使用了 seek 方法,定位到文件倒數(shù)第 25 個位置并使用 read 方法的 *a 參數(shù),即從當(dāng)期位置(倒數(shù)第 25 個位置)讀取整個文件。

-- 以只讀方式打開文件 file = io.open("test.lua", "r")file:seek("end",-25) print(file:read("*a"))-- 關(guān)閉打開的文件 file:close()

我這邊輸出的結(jié)果是:

st.lua 文件末尾--test

========================================================

下面是一個lua遞歸遍歷目錄文件的代碼:

require "io" require "lfs"---------------------------------------------------------------------------------- --It will return a table that contents all the file paths in the rootpath function getpathes(rootpath, pathes)pathes = pathes or {}for entry in lfs.dir(rootpath) doif entry ~= '.' and entry ~= '..' thenlocal path = rootpath .. '\\' .. entrylocal attr = lfs.attributes(path)assert(type(attr) == 'table')if attr.mode == 'directory' thengetpathes(path, pathes)elsetable.insert(pathes, path)--print(path)endendendreturn pathes endpathes = getpathes('d:\\軟件目錄\\夢露視頻桌面\\')for i,j in pairs(pathes) do print(i .. '--' ..j) end

?

總結(jié)

以上是生活随笔為你收集整理的Lua 文件 I/O的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。