主頁 > 知識庫 > Linux 下C語言獲取文件大小

Linux 下C語言獲取文件大小

熱門標簽:網(wǎng)絡電話外呼系統(tǒng)撥號軟件 貴陽400電話到哪里去辦理 宿松高德地圖標注 汨羅代理外呼系統(tǒng) 400電話申請找 天津智能外呼系統(tǒng)排名 申請400電話有什么用 電銷機器人加盟多少錢 4層電梯外呼控制系統(tǒng)設計

Linux 下C語言獲取文件大小

C語言是一種比較底層的語言,有時在其他語言中很容易操作的事情,在c語言中就比較麻煩,例如獲取一個文件的大小。Java中File類有個length函數(shù),Python中os.path包中有個getsize函數(shù),C語言中卻沒有直接對應的函數(shù)獲取文件大小。

       目前,網(wǎng)上有一種流傳很廣的方法,讀取文件到內(nèi)存,然后跳轉到文件末尾,查看跳轉的長度。代碼如下:

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獲得目前的文件訪問位置。這種方法可以認為是一種間接的獲取方式。雖說可以獲得文件大小,但是有兩個缺點。首先,ftell的返回值為long,在不同環(huán)境下占用的字節(jié)數(shù)也不同,這就可能存在long是四個字節(jié)的情況。此時,獲取的文件大小就不能超過2G,否則就會出錯。

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

這種方式首先獲得相關文件的狀態(tài)信息,然后從狀態(tài)信息中讀取大小信息。由于沒有讀取文件的操作,所以操作速度非???。強烈建議大家在linux下使用這種方式。Windows平臺下肯定也有類似的函數(shù)讀取文件信息,不過本人常年不在windows下編程,所以在此不做介紹。

您可能感興趣的文章:
  • linux下c語言的多線程編程
  • Linux下C語言的幾道經(jīng)典面試題小結(分享)
  • Linux 中C語言getcwd()函數(shù)的用法
  • Linux 下C語言連接mysql實例詳解
  • linux C語言開發(fā)管道通信實例詳解
  • linux下C語言實現(xiàn)寫日志功能

標簽:臨沂 廣東 海北 撫州 贛州 連云港 昌都 烏蘭察布

巨人網(wǎng)絡通訊聲明:本文標題《Linux 下C語言獲取文件大小》,本文關鍵詞  Linux,下,語言,獲取,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux 下C語言獲取文件大小》相關的同類信息!
  • 本頁收集關于Linux 下C語言獲取文件大小的相關信息資訊供網(wǎng)民參考!
  • 推薦文章