golang 獲取檔案大小

2021-10-13 19:54:31 字數 2340 閱讀 5247

目錄

read位元組方式

ioutil方式

stat方法

終極方案 os.stat()

在專案中,我們可能會需要獲取乙個檔案的大小,在go語言中,有很多方法來獲取乙個檔案的大小

func main() 

}fmt.println("file size is ",sum)

}}

這種方式需要開啟檔案,通過for迴圈讀取檔案的位元組內容,然後算出檔案的大小,這樣時也是最不能用的辦法,因為效率低,**量大。

上面的**比較囉嗦,這時候我們可能想到了使用ioutil包的readfile來代替,直接獲得檔案的內容,進而計算出檔案的大小。

func main() 

}

通過ioutil.readfile函式,我們三行**就可以搞定,的確方便很多,但是效率慢的問題依然,存在,如果是個很大的檔案呢?

繼續再進一步,我們不讀取檔案的內容來計算了,我們通過檔案的資訊

func main() 

}

這種方式不會再讀取檔案的內容,而是通過stat方法直接獲取,速度會非常快,尤其對於大檔案尤其有用。但是它還不是我們今天要講的終極辦法,因為它還是會開啟檔案,會占用它

func main() 

}

是的,也只需要三行**即可實現,這裡使用的是os.stat,通過他可以獲得檔案的元資料資訊,現在我們看看它能獲取到哪些資訊。

獲取檔案資訊

通過os.stat方法,我們可以獲取檔案的資訊,比如檔案大小、名字等。

func main() 

}

執行這段**看下結果:

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() else if os.isnotexist(err)else

}

通過os.isnotexist來判斷乙個檔案不存在。最後else的可能性比較少,這個時候可以看下具體的錯誤是什麼,再根據錯誤來判斷檔案是否存在。os.stat是乙個非常好的函式,可以讓我們非常高效的獲取檔案資訊,所以在專案中盡可能的使用它。

os.stat()方法用於獲取檔案屬性,示例如下

import (

"fmt"

"os")

func main()

fmt.println(fileinfo.name()) //應用商店.txt

fmt.println(fileinfo.isdir()) //false 判斷是否是目錄

fmt.println(fileinfo.modtime()) //2019-12-05 16:59:36.8832788 +0800 cst 檔案的修改時間

fmt.println(fileinfo.size()) //3097 檔案大小

fmt.println(fileinfo.mode()) // -rw-rw-rw- 讀寫屬性

fmt.println(fileinfo.sys()) //& 0 3097}

}

終端執行命令: go run demo.go e:\face.jpg

size = 178154 //size()是按byte位元組進行計算大小.

mode = -rw-rw-rw-

modtime = 2019-02-20 21:02:58.0055166 +0800 cst

isdir = false

sys = & 0 178154}ps其fileinfo原始碼

type fileinfo inte***ce    // 底層資料**(可以返回nil)

}

獲取檔案大小

1 找到檔案所在的絕對路徑。系統路徑 projectpath request.getsession getservletcontext getrealpath 檔案路徑 在上傳檔案的時候,一定會有檔案相對路徑,如果不清楚,可以打斷點然後在本地找到此檔案。檔案相對路徑 filepath 絕對路徑rea...

VC獲取檔案大小

vc獲取檔案大小 我查到兩種方法 方法一 win32 find data fileinfo handle hfind dword filesize const char filename 檔案的路徑及名字 hfind findfirstfile filename fileinfo if hfind ...

ORACLE獲取檔案大小

set serveroutput on declare ex boolean flen number bsize number begin utl file.fgetattr oraload test.txt ex,flen,bsize if ex then dbms output.put line...