溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux下C語言如何獲取文件大小

發(fā)布時間:2021-05-25 09:21:57 來源:億速云 閱讀:654 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Linux下C語言如何獲取文件大小的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Linux 下C語言獲取文件大小

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

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

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

什么是Linux系統(tǒng)

Linux是一種免費使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

感謝各位的閱讀!關(guān)于“Linux下C語言如何獲取文件大小”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI