C語言實現(xiàn)獲取文件大小與創(chuàng)建修改時間
源代碼:
#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)建時間 : %s", ctime(&stat_i.st_ctime));//Wed Nov 01 19:59:32 2023
// printf("最后一次修改時間: %s", ctime(&stat_i.st_mtime));//Wed Nov 01 19:59:36 2023
// printf("最近一次訪問時間: %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)建時間 : %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("最后一次修改時間: %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("最近一次訪問時間: %s\n", buf);
system("pause");
return 0;
}
編譯輸出:
$ ./a.exe
get file stat success
文件大小: 0.01 MB (10 Bytes)
文件創(chuàng)建時間 : 2023-11-01 19:59:32
最后一次修改時間: 2023-11-01 19:59:36
最近一次訪問時間: 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é)點號*/
mode_t st_mode; /* protection -保護模式?*/
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è)備號,針對設(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 -文件所占塊數(shù)*/
time_t st_atime; /* time of last access -最近存取時間*/
time_t st_mtime; /* time of last modification -最近修改時間*/
time_t st_ctime; /* time of last status change - */
};
方法補充
除了上文的方法,小編還為大家整理了C++獲取文件大小的其余方法,希望對大家有所幫助
方法一:
#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獲取文件指針位置離文件頭部的長度(rewind:將文件指針重置到文件頭)
* 方法2:使用stat函數(shù),獲取文件信息,然后獲取文件信息中的長度(stat不適用與符號鏈接文件;會反饋鏈接對應(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;
}
方法二:
通過C語言文件操作,獲取文件大小
以fopen打開的文件,通過fseek可以定位到文件尾,這時使用ftell函數(shù),返回的文件指針偏移值,就是文件的實際大小。
#include <stdio.h>//包含頭文件。
int file_size(char* filename)//獲取文件名為filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打開文件。
int size;
if(fp == NULL) // 打開文件失敗
return -1;
fseek(fp, 0, SEEK_END);//定位文件指針到文件尾。
size=ftell(fp);//獲取文件指針偏移量,即文件大小。
fclose(fp);//關(guān)閉文件。
return size;
}到此這篇關(guān)于C語言實現(xiàn)獲取文件大小與創(chuàng)建修改時間的文章就介紹到這了,更多相關(guān)C語言獲取文件大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)與算法之時間空間復(fù)雜度入門
這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)與算法之時間空間復(fù)雜度的入門教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02
使用c語言判斷100以內(nèi)素數(shù)的示例(c語言求素數(shù))
這篇文章主要介紹了使用c語言判斷100以內(nèi)素數(shù)的示例(c語言求素數(shù)),需要的朋友可以參考下2014-03-03
C語言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)
這篇文章主要介紹了C語言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08

