C語(yǔ)言實(shí)現(xiàn)獲取文件大小與創(chuàng)建修改時(shí)間
源代碼:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <sys/stat.h> #include <sys/types.h> #define EXE_ABORT() {system("pause");return 0;} #define FILEPATH "./test.txt" int main(int argc, char *argv[]) { FILE *fp_i; int i = 0; int ret = 0; char buf[128]; struct stat stat_i; struct tm *tm_p; ret = stat((const char *)FILEPATH, &stat_i); if(ret != 0) { printf("%s: get file stat failed", FILEPATH); EXE_ABORT(); } printf("get file stat success\n"); //! 文件的大小,字節(jié)為單位 printf("文件大小: %.02f MB (%d Bytes)\n", stat_i.st_size / 1024.0, stat_i.st_size); // printf("文件創(chuàng)建時(shí)間 : %s", ctime(&stat_i.st_ctime));//Wed Nov 01 19:59:32 2023 // printf("最后一次修改時(shí)間: %s", ctime(&stat_i.st_mtime));//Wed Nov 01 19:59:36 2023 // printf("最近一次訪問(wèn)時(shí)間: %s", ctime(&stat_i.st_atime));//Wed Nov 01 19:59:36 2023 tm_p = localtime(&stat_i.st_ctime); memset(buf, 0, sizeof(buf)/sizeof(buf[0])); //2023-11-01 19:59:32 strftime(buf, 128, "%Y-%m-%d %X", tm_p); printf("文件創(chuàng)建時(shí)間 : %s\n", buf); tm_p = localtime(&stat_i.st_mtime); memset(buf, 0, sizeof(buf)/sizeof(buf[0])); strftime(buf, 128, "%Y-%m-%d %X", tm_p); printf("最后一次修改時(shí)間: %s\n", buf); tm_p = localtime(&stat_i.st_atime); memset(buf, 0, sizeof(buf)/sizeof(buf[0])); strftime(buf, 128, "%Y-%m-%d %X", tm_p); printf("最近一次訪問(wèn)時(shí)間: %s\n", buf); system("pause"); return 0; }
編譯輸出:
$ ./a.exe
get file stat success
文件大小: 0.01 MB (10 Bytes)
文件創(chuàng)建時(shí)間 : 2023-11-01 19:59:32
最后一次修改時(shí)間: 2023-11-01 19:59:36
最近一次訪問(wèn)時(shí)間: 2023-11-01 19:59:36
結(jié)構(gòu)體原型:
struct stat { dev_t st_dev; /* ID of device containing file -文件所在設(shè)備的ID*/ ino_t st_ino; /* inode number -inode節(jié)點(diǎn)號(hào)*/ mode_t st_mode; /* protection -保護(hù)模式?*/ nlink_t st_nlink; /* number of hard links -鏈向此文件的連接數(shù)(硬連接)*/ uid_t st_uid; /* user ID of owner -user id*/ gid_t st_gid; /* group ID of owner - group id*/ dev_t st_rdev; /* device ID (if special file) -設(shè)備號(hào),針對(duì)設(shè)備文件*/ off_t st_size; /* total size, in bytes -文件大小,字節(jié)為單位*/ blksize_t st_blksize; /* blocksize for filesystem I/O -系統(tǒng)塊的大小*/ blkcnt_t st_blocks; /* number of blocks allocated -文件所占?jí)K數(shù)*/ time_t st_atime; /* time of last access -最近存取時(shí)間*/ time_t st_mtime; /* time of last modification -最近修改時(shí)間*/ time_t st_ctime; /* time of last status change - */ };
方法補(bǔ)充
除了上文的方法,小編還為大家整理了C++獲取文件大小的其余方法,希望對(duì)大家有所幫助
方法一:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> /*確保此文件存在*/ #define TEST_FILE "/home/xxx/mysrc/test/test.file" /* 獲取文件大小的方法: * 方法1:fseek設(shè)置文件指針位置+ftell獲取文件指針位置離文件頭部的長(zhǎng)度(rewind:將文件指針重置到文件頭) * 方法2:使用stat函數(shù),獲取文件信息,然后獲取文件信息中的長(zhǎng)度(stat不適用與符號(hào)鏈接文件;會(huì)反饋鏈接對(duì)應(yīng)的引用件信息) */ int main(){ /*fseek+ftell*/ FILE *fp = NULL; int iRet = 0; int fLen = 0; struct stat fStat; long int fSize = 0; fp = fopen( TEST_FILE, "r" ); if( NULL == fp ){ printf( "fopen() error.\n" ); return 0; } printf( "fopen() success.\n" ); iRet = fseek( fp, 0, SEEK_END ); if( -1 == iRet ){ fclose( fp ); printf( "fseek() error.\n" ); return 0; } printf( "fseek() success.\n" ); fLen = ftell( fp ); if( -1 == fLen ){ fclose( fp ); printf( "ftell() error.\n" ); return 0; } printf( "ftell() success.\n" ); printf( "file=%s;len=%d\n", TEST_FILE, fLen ); /*重置文件指針到文件頭*/ rewind( fp ); fclose( fp ); /*方法2*/ printf( "==================================================\n" ); memset( &fStat, 0x00, sizeof( fStat ) ); iRet = stat( TEST_FILE, &fStat); if( -1 == iRet ){ printf( "stat() error.\n" ); return 0; } printf( "stat() success.\n" ); fLen = 0; fLen = fStat.st_size; printf( "fSize=%d.\n", fLen ); return 1; }
方法二:
通過(guò)C語(yǔ)言文件操作,獲取文件大小
以fopen打開(kāi)的文件,通過(guò)fseek可以定位到文件尾,這時(shí)使用ftell函數(shù),返回的文件指針偏移值,就是文件的實(shí)際大小。
#include <stdio.h>//包含頭文件。 int file_size(char* filename)//獲取文件名為filename的文件大小。 { FILE *fp = fopen(filename, "rb");//打開(kāi)文件。 int size; if(fp == NULL) // 打開(kāi)文件失敗 return -1; fseek(fp, 0, SEEK_END);//定位文件指針到文件尾。 size=ftell(fp);//獲取文件指針偏移量,即文件大小。 fclose(fp);//關(guān)閉文件。 return size; }
到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)獲取文件大小與創(chuàng)建修改時(shí)間的文章就介紹到這了,更多相關(guān)C語(yǔ)言獲取文件大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度的入門教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用
這篇文章主要介紹了二分查找算法在C語(yǔ)言程序中的使用示例,文中最后提到了使用二分查找法一個(gè)需要注意的地方,需要的朋友可以參考下2021-08-08使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù))
這篇文章主要介紹了使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù)),需要的朋友可以參考下2014-03-03C語(yǔ)言跳轉(zhuǎn)瀏覽器打開(kāi)指定URL的操作代碼
這篇文章主要介紹了C語(yǔ)言跳轉(zhuǎn)瀏覽器打開(kāi)指定URL,該代碼使用sprintf()函數(shù)將要打開(kāi)的URL添加到一個(gè)系統(tǒng)命令中,然后使用system()函數(shù)調(diào)用該命令以默認(rèn)瀏覽器打開(kāi)URL,需要的朋友可以參考下2023-04-04C語(yǔ)言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)
這篇文章主要介紹了C語(yǔ)言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08