c語言可以通過stat()函數(shù)獲得文件屬性,通過返回的文件屬性,從中獲取文件大小。
創(chuàng)新互聯(lián)服務項目包括朗縣網(wǎng)站建設、朗縣網(wǎng)站制作、朗縣網(wǎng)頁制作以及朗縣網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,朗縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到朗縣省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
#include sys/stat.h ?可見以下結構體和函數(shù)
struct stat {
? _dev_t st_dev;
? _ino_t st_ino;
? unsigned short st_mode;
? short st_nlink;
? short st_uid;
? short st_gid;
? _dev_t st_rdev;
? _off_t st_size; ? //文件大小
? time_t st_atime;
? time_t st_mtime;
? time_t st_ctime;
? };
stat(const char *, struct _stat *); ?//根據(jù)文件名得到文件屬性
參考代碼:
#include?sys/stat.h
void?main(?)
{
struct?stat?buf?;
if?(?stat(?"test.txt",?buf?)??0?)
{
perror(?"stat"?);
return?;
}
printf("file?size:%d\n",?buf.st_size?);
}
方法一:利用純C語言來獲取文件大小
unsigned long get_file_size(const char *filename){
unsigned long size;
FILE* fp = fopen( filename, "rb" );
if(fp==NULL){
printf("ERROR: Open file %s failed.\n", filename);
return 0;
}
fseek( fp, 0L, SEEK_END );
size=ftell(fp);
fclose(fp);
return size;
}
注:
ftell函數(shù)返回文件指針當前位置相對應文件首的便宜字節(jié)數(shù),參數(shù)為文件指針。
fseek函數(shù)用于移動文件指針,第一個參數(shù)是文件指針,第二個參數(shù)是偏移量(正數(shù)表示正向偏移,負數(shù)表示負向偏移),第三個參數(shù)設定文件從哪里偏移,有三個選擇:SEEK_SET(文件頭,其是常數(shù)0)、SEEK_CUR(文件當前位置,其是常數(shù)1)、SEEK_END(文件尾,其是常數(shù)2)。
優(yōu)缺點:好處是你只要會C語言,就能夠完全掌握而且十分容易理解這里面的道理。確定是純C語言目前只能讀取不超過2G的文件。所以對于超過2G的文件,其返回值是不正確的。
方法二:利用系統(tǒng)函數(shù)獲取
筆者使用Uinx/Linux,所以此處就只寫這類平臺上的文件大小獲許方式了。在Linux類平臺上,每個被系統(tǒng)所管理的文件都有一個文件屬性結構體(其中一個屬性就是文件大?。┡c其對應,這個結構體叫stat,其內(nèi)容在 /sys/stat.h中:
stat {
mode_t st_mode; //文件對應的模式,文件,目錄等
ino_t st_ino; //inode節(jié)點號
dev_t st_dev; //設備號碼
dev_t st_rdev; //特殊設備號碼
nlink_t st_nlink; //文件的連接數(shù)
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者對應的組
off_t st_size; //普通文件,對應的文件字節(jié)數(shù)
time_t st_atime; //文件最后被訪問的時間
time_t st_mtime; //文件內(nèi)容最后被修改的時間
time_t st_ctime; //文件狀態(tài)改變時間
blksize_t st_blksize; //文件內(nèi)容對應的塊大小
blkcnt_t st_blocks; //偉建內(nèi)容對應的塊數(shù)量
}
文件的上述屬性,可以通過一個stat函數(shù)來獲取。
stat函數(shù)聲明形式:
stat(const char *restrict path, struct stat *restrict buf);
第一個參數(shù)是文件名,第二個參數(shù)是指向一個stat結構的指針。
由此我們很容易寫出如下函數(shù):
unsigned long get_file_size(const char *filename){
struct stat buf;
if(stat(filename, buf)0){
return 0;
}
return (unsigned long)buf.st_size;
}
在進行大文件處理時,顯然需要采取后者。
注:與stat函數(shù)類似的函數(shù)還有l(wèi)stat函數(shù)、fstat 函數(shù)
你需要使用fseek函數(shù)將文件指針指向最后:
fseek(fp, 0L, SEEK_END);
sz = ftell(fp);
其中sz就是文件的大小。
當你知道文件的大小后,就可以通過fseek重新定義到文件開始的位置:
fseek(fp, 0L, SEEK_SET);
或使用下面的函數(shù)定義的文件開始:
rewind(fp);
可以到秒秒學上看看相關的內(nèi)容,上面的課程講解得可以的。
網(wǎng)頁標題:c語言求文件大小的函數(shù),c語言如何獲取文件大小
當前路徑:http://aaarwkj.com/article40/dsspjho.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、品牌網(wǎng)站建設、網(wǎng)站設計、手機網(wǎng)站建設、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)