国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

Linux 下C語言獲取文件大小

2020-07-27 18:53:24
字體:
供稿:網(wǎng)友

Linux 下C語言獲取文件大小

C語言是一種比較底層的語言,有時(shí)在其他語言中很容易操作的事情,在c語言中就比較麻煩,例如獲取一個文件的大小。Java中File類有個length函數(shù),Python中os.path包中有個getsize函數(shù),C語言中卻沒有直接對應(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移動一個文件的存取位置到文件的末尾,然后利用ftell獲得目前的文件訪問位置。這種方法可以認(rèn)為是一種間接的獲取方式。雖說可以獲得文件大小,但是有兩個缺點(diǎn)。首先,ftell的返回值為long,在不同環(huán)境下占用的字節(jié)數(shù)也不同,這就可能存在long是四個字節(jié)的情況。此時(shí),獲取的文件大小就不能超過2G,否則就會出錯。

但是,上述缺點(diǎn)在大多數(shù)情況下都沒問題,超大文件還可以通過fsetpos和fgetpos獲取文件大小。最致命的缺陷就是它需要加載文件到內(nèi)存,然后跳轉(zhuǎn)到文件末尾,這個操作非常耗時(shí)!可能在讀取少量文件時(shí)體現(xiàn)不出,但是當(dāng)文件達(dá)到上萬個時(shí),速度就會慢的要命,這種方法相當(dāng)于把所有的文件都讀到內(nèi)存中一遍!

如果可能,盡量避免采用上述間接的方式獲取文件大小。在Linux下,還有一種更簡單的方式,通過讀取文件信息獲得文件大小,速度也快很多。代碼如下:

#include <sys/stat.h> int 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平臺下肯定也有類似的函數(shù)讀取文件信息,不過本人常年不在windows下編程,所以在此不做介紹。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永新县| 金溪县| 赤峰市| 张掖市| 鄂温| 二连浩特市| 博野县| 阳朔县| 任丘市| 吐鲁番市| 葵青区| 广西| 平昌县| 明溪县| 斗六市| 盐城市| 鲁甸县| 旌德县| 泊头市| 厦门市| 祁门县| 东源县| 疏附县| 霍山县| 龙南县| 巴林左旗| 兖州市| 沈丘县| 湘潭市| 南召县| 济南市| 青冈县| 新绛县| 陇西县| 习水县| 安远县| 淮阳县| 海丰县| 桂林市| 璧山县| 乐亭县|