最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)獲取文件大小與創(chuàng)建修改時間

 更新時間:2023年11月03日 09:55:10   作者:whik1194  
這篇文章主要為大家詳細(xì)介紹了如何通過C語言實現(xiàn)獲取文件大小、創(chuàng)建時間與修改時間,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

源代碼:

#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 -保護(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è)備號,針對設(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 - */    
}; 

方法補(bǔ)充

除了上文的方法,小編還為大家整理了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語言大廠面試技巧及strcpy()函數(shù)示例詳解

    C語言大廠面試技巧及strcpy()函數(shù)示例詳解

    這篇文章主要為大家介紹了C語言面試技巧,以strcpy()函數(shù)為示例進(jìn)行分析詳解,有需要沖刺大廠的朋友們可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 淺析C++中cout的運(yùn)行機(jī)制

    淺析C++中cout的運(yùn)行機(jī)制

    關(guān)于C++中cout的使用,相信大家再熟悉不過了,然而對于cout是如何輸出的?輸出的機(jī)制是啥,需要進(jìn)一步的了解。本章娓娓道來。前幾天在網(wǎng)上看到這么一個題目
    2013-10-10
  • 淺談C++11的std::function源碼解析

    淺談C++11的std::function源碼解析

    類模版std::function是一種通用的多態(tài)函數(shù)包裝器std::function的實例可以對任何可以調(diào)用的目標(biāo)實體進(jìn)行存儲、復(fù)制、和調(diào)用操作,本文詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • c語言多線程編程使用示例

    c語言多線程編程使用示例

    這篇文章主要介紹了c語言多線程編程使用示例,需要的朋友可以參考下
    2014-04-04
  • 詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù)

    詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù)

    這篇文章主要介紹了詳解C語言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C++線程池的簡單實現(xiàn)方法

    C++線程池的簡單實現(xiàn)方法

    這篇文章主要介紹了C++線程池的簡單實現(xiàn)方法,包括了線程操作函數(shù)及相關(guān)屬性的用法,需要的朋友可以參考下
    2014-09-09
  • C語言制作簡易金山打字通功能的代碼

    C語言制作簡易金山打字通功能的代碼

    今天小編就為大家分享一篇關(guān)于C語言制作簡易金山打字通功能的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 關(guān)于C++中由于字節(jié)對齊引起內(nèi)存問題定位分析

    關(guān)于C++中由于字節(jié)對齊引起內(nèi)存問題定位分析

    前幾天遇到一個稀奇古怪的問題,在創(chuàng)建對象的時候程序異常退出,查找代碼發(fā)現(xiàn)結(jié)構(gòu)體數(shù)組問題,最終把問題簡化得到解決方法,下面小編把我的問題及解決方案分享到腳本之家平臺供大家參考下
    2021-06-06
  • 數(shù)據(jù)結(jié)構(gòu)之堆詳解

    數(shù)據(jù)結(jié)構(gòu)之堆詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之堆詳解,本文講解了堆的基本常識堆的基本操作、堆的應(yīng)用等內(nèi)容,需要的朋友可以參考下
    2014-08-08
  • C++ Boost MPI接口詳細(xì)講解

    C++ Boost MPI接口詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11

最新評論

临漳县| 德州市| 安阳市| 广西| 汝州市| 灵川县| 林周县| 富顺县| 江安县| 申扎县| 贵定县| 庆云县| 大田县| 广昌县| 沂源县| 定南县| 微山县| 句容市| 阿坝| 都江堰市| 班戈县| 罗江县| 阿拉善右旗| 蒙阴县| 容城县| 宝兴县| 洮南市| 新疆| 广宗县| 绵竹市| 东乌珠穆沁旗| 左云县| 阿坝县| 盐山县| 龙山县| 南京市| 玛曲县| 曲沃县| 德阳市| 葵青区| 海丰县|