Lua file:seek()

前言#

今天來看一個和這個IO系列格格不入的函數(shù)公黑,為什么說他格格不入呢,因為他必須使用顯示的文件描述符摄咆,而不能使用io.xxxx這樣的形式凡蚜,實際上這個函數(shù)也是文件操作中使用比較多的函數(shù),用來控制文件的的讀/寫指針吭从,也就是讀/寫的位置朝蜘,控制了文件中最后的內(nèi)容形式。

內(nèi)容#


file:seek()##

  • 原型:file:seek([whence][,offset])
  • 解釋:設(shè)置和獲取當(dāng)前文件位置,成功則返回最終的文件位置(按字節(jié)),失敗則返回nil加錯誤信息涩金,其中參數(shù)offset表示偏移的字節(jié)數(shù)谱醇,默認為0,whence是一個描述參數(shù)的字符串步做,一共有下述3中取值:
    • "set":設(shè)置從文件頭開始
  • "cur": 設(shè)置從當(dāng)前位置開始[默認]
  • "end": 設(shè)置從文件尾開始

Usage##

  • 首先新建一個文件命名為seektest.lua然后編寫如下代碼:
-- 打開文件
local myfile = io.open("seektest.txt", "w")
if nil == myfile then
    print("open file seektest.txt fail")
end

-- 記錄文件開始位置
local beginpos = myfile:seek()
print("file begin pos = "..beginpos)

-- 向后移動100個字節(jié)
local movehundred = myfile:seek("cur", 100)
print("after move hundred file pos = "..movehundred)

-- 回退95個字節(jié)副渴,開始輸入內(nèi)容
local moveback = myfile:seek("cur", -95)
print("after move back file pos = "..moveback)
myfile:write("file begin......................")
myfile:write("................................")

-- 向后移動20字節(jié),插入內(nèi)容
myfile:seek("set", 20)
myfile:write("\nthis is insert content\n")

-- 從后回退15字節(jié)插入內(nèi)容
myfile:seek("end", -15)
myfile:write("\nbingo end")

-- 記錄此文件大小
local curfilesize = myfile:seek("end")
print("cur file size = "..curfilesize)

-- 結(jié)尾向后擴大10字節(jié)插入內(nèi)容
myfile:seek("end", 10)
myfile:write("test")

-- 記錄最終文件大小作比較
local finalfilesize = myfile:seek("end")
print("final file size = "..finalfilesize)

-- 移動文件指針到開頭
myfile:seek("set")
myfile:write("haha ")
myfile:close();


myfile = io.open("seektest.txt", "r")
-- 讀取文件內(nèi)容
local content = myfile:read("*a");
myfile:close();

-- 打印內(nèi)容
print("\nfile content is:")
print(content)
  • 運行結(jié)果
io_seek.png

總結(jié)#

  • 不帶參數(shù)file:seek()則返回當(dāng)前位置全度,file:seek("set")則定位到文件頭煮剧,file:seek("end")則定位到文件尾并返回文件大小。
  • 參數(shù)whence的默認值是"cur"将鸵,而參數(shù)offset的默認值是0轿秧。
  • 由代碼可知參數(shù)offset可以是負數(shù)表示向前移動。
  • 分析一下結(jié)果中為什么沒有輸出空白的部分和字符“test”呢咨堤,原因是中間有一段是沒有內(nèi)容的菇篡,這段內(nèi)容的默認是我們不知道是什么,因為這是我們直接跳過的一喘,所以在輸出時字符串被截斷了驱还,導(dǎo)致字符串“test”沒有顯示出來。
  • 我借助其他文本工具顯示出最后的一段空白字符是NULL凸克,也就是'\0'议蟆,這也就解釋了為什么最后的“test”內(nèi)容被截斷了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萎战,一起剝皮案震驚了整個濱河市咐容,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚂维,老刑警劉巖戳粒,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件路狮,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔚约,警方通過查閱死者的電腦和手機奄妨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苹祟,“玉大人砸抛,你說我怎么就攤上這事∈鞣悖” “怎么了直焙?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砂轻。 經(jīng)常有香客問我奔誓,道長,這世上最難降的妖魔是什么舔清? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任丝里,我火速辦了婚禮曲初,結(jié)果婚禮上体谒,老公的妹妹穿的比我還像新娘。我一直安慰自己臼婆,他們只是感情好抒痒,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颁褂,像睡著了一般故响。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颁独,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天彩届,我揣著相機與錄音,去河邊找鬼誓酒。 笑死樟蠕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的靠柑。 我是一名探鬼主播寨辩,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歼冰!你這毒婦竟也來了靡狞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤隔嫡,失蹤者是張志新(化名)和其女友劉穎甸怕,沒想到半個月后甘穿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蕾各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年扒磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片式曲。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡妨托,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吝羞,到底是詐尸還是另有隱情兰伤,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布钧排,位于F島的核電站敦腔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恨溜。R本人自食惡果不足惜符衔,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糟袁。 院中可真熱鬧判族,春花似錦、人聲如沸项戴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽周叮。三九已至辩撑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仿耽,已是汗流浹背合冀。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留项贺,地道東北人君躺。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像敬扛,于是被迫代替她去往敵國和親晰洒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容