這篇文章給大家分享的是有關(guān)Linux下C語言如何獲取文件大小的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
10多年的南和網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整南和建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“南和網(wǎng)站設(shè)計(jì)”,“南和網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。Linux 下C語言獲取文件大小
C語言是一種比較底層的語言,有時(shí)在其他語言中很容易操作的事情,在c語言中就比較麻煩,例如獲取一個(gè)文件的大小。Java中File類有個(gè)length函數(shù),Python中os.path包中有個(gè)getsize函數(shù),C語言中卻沒有直接對(duì)應(yīng)的函數(shù)獲取文件大小。
目前,網(wǎng)上有一種流傳很廣的方法,讀取文件到內(nèi)存,然后跳轉(zhuǎn)到文件末尾,查看跳轉(zhuǎn)的長度。代碼如下:
int file_size(char* filename) { FILE *fp=fopen(filename,"r"); if(!fp) return -1; fseek(fp,0L,SEEK_END); int size=ftell(fp); fclose(fp); return size; }
上述方法利用fseek移動(dòng)一個(gè)文件的存取位置到文件的末尾,然后利用ftell獲得目前的文件訪問位置。這種方法可以認(rèn)為是一種間接的獲取方式。雖說可以獲得文件大小,但是有兩個(gè)缺點(diǎn)。首先,ftell的返回值為long,在不同環(huán)境下占用的字節(jié)數(shù)也不同,這就可能存在long是四個(gè)字節(jié)的情況。此時(shí),獲取的文件大小就不能超過2G,否則就會(huì)出錯(cuò)。
但是,上述缺點(diǎn)在大多數(shù)情況下都沒問題,超大文件還可以通過fsetpos和fgetpos獲取文件大小。最致命的缺陷就是它需要加載文件到內(nèi)存,然后跳轉(zhuǎn)到文件末尾,這個(gè)操作非常耗時(shí)!可能在讀取少量文件時(shí)體現(xiàn)不出,但是當(dāng)文件達(dá)到上萬個(gè)時(shí),速度就會(huì)慢的要命,這種方法相當(dāng)于把所有的文件都讀到內(nèi)存中一遍!
如果可能,盡量避免采用上述間接的方式獲取文件大小。在Linux下,還有一種更簡單的方式,通過讀取文件信息獲得文件大小,速度也快很多。代碼如下:
#includeint file_size2(char* filename) { struct stat statbuf; stat(filename,&statbuf); int size=statbuf.st_size; return size; }
這種方式首先獲得相關(guān)文件的狀態(tài)信息,然后從狀態(tài)信息中讀取大小信息。由于沒有讀取文件的操作,所以操作速度非??臁?qiáng)烈建議大家在linux下使用這種方式。Windows平臺(tái)下肯定也有類似的函數(shù)讀取文件信息,不過本人常年不在windows下編程,所以在此不做介紹。
Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。
感謝各位的閱讀!關(guān)于“Linux下C語言如何獲取文件大小”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!