成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語言 | 你還在這樣獲取文件的大小嗎?

開發(fā) 后端
在項(xiàng)目中,我們可能會(huì)需要獲取一個(gè)文件的大小,在Golang(Go語言)中,有很多方法來獲取一個(gè)文件的大小,看看你是否還在用最慢的方式。

在項(xiàng)目中,我們可能會(huì)需要獲取一個(gè)文件的大小,在Golang(Go語言)中,有很多方法來獲取一個(gè)文件的大小,看看你是否還在用最慢的方式。

[[336484]]

Read字節(jié)方式

第一種,是最直觀會(huì)想到的,也就是打開文件,把文件讀取一遍。

  1. func main() { 
  2.     file,err:=os.Open("water"
  3.     if err ==nil { 
  4.         sum := 0 
  5.         buf:=make([]byte,2014) 
  6.         for  { 
  7.             n,err:=file.Read(buf) 
  8.             sum+=n 
  9.             if err==io.EOF { 
  10.                 break 
  11.             } 
  12.         } 
  13.         fmt.Println("file size is ",sum
  14.     } 

這種方式需要打開文件,通過for循環(huán)讀取文件的字節(jié)內(nèi)容,然后算出文件的大小,這樣時(shí)也是最不能用的辦法,因?yàn)樾实停a量大。

ioutil方式

上面的代碼比較啰嗦,這時(shí)候我們可能想到了使用ioutil包的ReadFile來代替,直接獲得文件的內(nèi)容,進(jìn)而計(jì)算出文件的大小。

  1. func main() { 
  2.     content,err:=ioutil.ReadFile("water"
  3.     if err == nil { 
  4.         fmt.Println("file size is ",len(content)) 
  5.     } 

通過ioutil.ReadFile函數(shù),我們?nèi)写a就可以搞定,的確方便很多,但是效率慢的問題依然,存在,如果是個(gè)很大的文件呢?

Stat方法

繼續(xù)再進(jìn)一步,我們不讀取文件的內(nèi)容來計(jì)算了,我們通過文件的信息

  1. func main() { 
  2.     file,err:=os.Open("water"
  3.  
  4.     if err == nil { 
  5.         fi,_:=file.Stat() 
  6.         fmt.Println("file size is ",fi.Size()) 
  7.     } 

這種方式不會(huì)再讀取文件的內(nèi)容,而是通過Stat方法直接獲取,速度會(huì)非常快,尤其對于大文件尤其有用。但是它還不是我們今天要講的終極辦法,因?yàn)樗€是會(huì)打開文件,會(huì)占用它。

終極方案

好了,我們的終極方案終于要登場了,他的代碼也非常簡單。

  1. func main() { 
  2.     fi,err:=os.Stat("water"
  3.     if err ==nil { 
  4.         fmt.Println("file size is ",fi.Size(),err) 
  5.     } 

是的,也只需要三行代碼即可實(shí)現(xiàn),這里使用的是os.Stat,通過他可以獲得文件的元數(shù)據(jù)信息,現(xiàn)在我們看看它能獲取到哪些信息。

獲取文件信息

通過os.Stat方法,我們可以獲取文件的信息,比如文件大小、名字等。

  1. func main() { 
  2.     fi,err:=os.Stat("water"
  3.     if err ==nil { 
  4.         fmt.Println("name:",fi.Name()) 
  5.         fmt.Println("size:",fi.Size()) 
  6.         fmt.Println("is dir:",fi.IsDir()) 
  7.         fmt.Println("mode::",fi.Mode()) 
  8.         fmt.Println("modTime:",fi.ModTime()) 
  9.     } 

運(yùn)行這段代碼看下結(jié)果:

  1. name: water 
  2. size: 403 
  3. is dir: false 
  4. mode:: -rw-r--r-- 
  5. modTime: 2018-05-06 18:52:07 +0800 CST 

以上就是可以獲取到的文件信息,還包括判斷是否是目錄,權(quán)限模式和修改時(shí)間。所以我們對于文件的信息獲取要使用os.Stat函數(shù),它可以在不打開文件的情況下,高效獲取文件信息。

判斷文件是否存在

os.Stat函數(shù)有兩個(gè)返回值,一個(gè)是文件信息,一個(gè)是err,通過err我們可以判斷文件是否存在。

首先,err==nil的時(shí)候,文件肯定是存在的;其次err!=nil的時(shí)候也不代表不存在,這時(shí)候我們就需要進(jìn)行嚴(yán)密的判斷。

  1. func main() { 
  2.     _,err:=os.Stat("."
  3.     if err ==nil { 
  4.         fmt.Println("file exist"
  5.     }else if os.IsNotExist(err){ 
  6.         fmt.Println("file not exist"
  7.     }else
  8.         fmt.Println(err) 
  9.     } 

通過os.IsNotExist來判斷一個(gè)文件不存在。最后else的可能性比較少,這個(gè)時(shí)候可以看下具體的錯(cuò)誤是什么,再根據(jù)錯(cuò)誤來判斷文件是否存在。

小結(jié)

os.Stat是一個(gè)非常好的函數(shù),可以讓我們非常高效的獲取文件信息,所以在項(xiàng)目中盡可能的使用它。

責(zé)任編輯:未麗燕 來源: 飛雪無情
相關(guān)推薦

2022-10-24 09:57:02

runeGo語言

2021-03-16 22:44:18

Go語言開發(fā)

2014-01-09 14:52:47

創(chuàng)意開源

2024-05-10 08:36:40

Go語言對象

2012-07-19 10:03:32

2019-06-28 15:43:50

編程語言程序員Java

2022-02-28 08:11:30

gopsutil網(wǎng)絡(luò)進(jìn)程

2010-11-23 10:53:40

騎驢找馬

2024-11-12 16:28:34

2023-01-04 11:35:21

預(yù)測模型預(yù)售

2022-02-23 18:36:11

釣魚郵件數(shù)據(jù)泄露網(wǎng)絡(luò)攻擊

2009-12-11 10:34:15

Linux獲取文件大小

2018-05-15 10:34:50

JavaScript語言互聯(lián)網(wǎng)

2015-03-04 10:49:30

2019-04-08 14:58:36

數(shù)據(jù)庫SQL數(shù)據(jù)類型

2024-08-26 15:17:16

2020-01-20 14:30:39

HTTP概念標(biāo)頭

2020-04-28 08:55:11

MySQL數(shù)據(jù)庫

2019-11-07 21:26:22

iOS 14蘋果谷歌

2012-03-05 20:57:46

Siri
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 夜夜草| 日本黄色一级片视频 | 成人福利电影 | 亚洲性人人天天夜夜摸 | 久久蜜桃资源一区二区老牛 | 久久国产欧美日韩精品 | 日韩欧美一区二区三区免费看 | 久久毛片 | 亚洲乱码国产乱码精品精的特点 | 精品中文字幕在线 | 自拍偷拍视频网 | 亚洲精品久久久一区二区三区 | 男女网站免费观看 | 中文字幕第二十页 | 国产毛片久久久久久久久春天 | 久久成人国产精品 | 欧美视频中文字幕 | 99re在线 | 老司机67194精品线观看 | 日韩免费中文字幕 | 欧美激情在线精品一区二区三区 | 中文字幕一级毛片视频 | 国产精品久久久久久久岛一牛影视 | 91精品国产91久久久久游泳池 | 亚洲第一av网站 | 欧美亚洲高清 | 伊人精品久久久久77777 | 99九九久久 | 午夜电影一区二区 | 天天干国产 | av网站在线播放 | 久久成人免费视频 | 美女精品一区 | 日韩视频在线一区 | 国产亚洲欧美日韩精品一区二区三区 | 亚洲国产成人av好男人在线观看 | 国产精彩视频在线观看 | 国产精品久久久久久久久久久久冷 | 国产精品久久久亚洲 | 精品国产乱码久久久久久影片 | 欧美一级二级三级视频 |