Go语言中怎么获取文件的大小

本篇文章为大家展示了Go语言中怎么获取文件的大小,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联建站坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都网站建设、网站设计、微信公众号开发、电商网站开发,小程序设计,软件按需设计等一站式互联网企业服务。

Read字节方式

第一种,是最直观会想到的,也就是打开文件,把文件读取一遍。

func main() {     file,err:=os.Open("water")     if err ==nil {         sum := 0         buf:=make([]byte,2014)         for  {             n,err:=file.Read(buf)             sum+=n             if err==io.EOF {                 break             }         }         fmt.Println("file size is ",sum)     } }

这种方式需要打开文件,通过for循环读取文件的字节内容,然后算出文件的大小,这样时也是最不能用的办法,因为效率低,代码量大。

ioutil方式

上面的代码比较啰嗦,这时候我们可能想到了使用ioutil包的ReadFile来代替,直接获得文件的内容,进而计算出文件的大小。

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

通过ioutil.ReadFile函数,我们三行代码就可以搞定,的确方便很多,但是效率慢的问题依然,存在,如果是个很大的文件呢?

Stat方法

继续再进一步,我们不读取文件的内容来计算了,我们通过文件的信息

func main() {     file,err:=os.Open("water")      if err == nil {         fi,_:=file.Stat()         fmt.Println("file size is ",fi.Size())     } }

这种方式不会再读取文件的内容,而是通过Stat方法直接获取,速度会非常快,尤其对于大文件尤其有用。但是它还不是我们今天要讲的终极办法,因为它还是会打开文件,会占用它。

终极方案

好了,我们的终极方案终于要登场了,他的代码也非常简单。

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

是的,也只需要三行代码即可实现,这里使用的是os.Stat,通过他可以获得文件的元数据信息,现在我们看看它能获取到哪些信息。

获取文件信息

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

func main() {     fi,err:=os.Stat("water")     if err ==nil {         fmt.Println("name:",fi.Name())         fmt.Println("size:",fi.Size())         fmt.Println("is dir:",fi.IsDir())         fmt.Println("mode::",fi.Mode())         fmt.Println("modTime:",fi.ModTime())     } }

运行这段代码看下结果:

name: water size: 403 is dir: false mode:: -rw-r--r-- modTime: 2018-05-06 18:52:07 +0800 CST

以上就是可以获取到的文件信息,还包括判断是否是目录,权限模式和修改时间。所以我们对于文件的信息获取要使用os.Stat函数,它可以在不打开文件的情况下,高效获取文件信息。

判断文件是否存在

os.Stat函数有两个返回值,一个是文件信息,一个是err,通过err我们可以判断文件是否存在。

首先,err==nil的时候,文件肯定是存在的;其次err!=nil的时候也不代表不存在,这时候我们就需要进行严密的判断。

func main() {     _,err:=os.Stat(".")     if err ==nil {         fmt.Println("file exist")     }else if os.IsNotExist(err){         fmt.Println("file not exist")     }else{         fmt.Println(err)     } }

通过os.IsNotExist来判断一个文件不存在。最后else的可能性比较少,这个时候可以看下具体的错误是什么,再根据错误来判断文件是否存在。

上述内容就是Go语言中怎么获取文件的大小,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


文章标题:Go语言中怎么获取文件的大小
本文网址:http://scyanting.com/article/godcip.html