欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年11月03日 09:55:10   作者:whik1194  
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)C語(yǔ)言實(shí)現(xiàn)獲取文件大小、創(chuàng)建時(shí)間與修改時(shí)間,文中的示例代碼講解詳細(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)建時(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/C++實(shí)操True and false詳解

    C/C++實(shí)操True and false詳解

    這篇文章主要給大家介紹了關(guān)于Python中常用的數(shù)據(jù)類型bool(布爾)類型的兩個(gè)值:True和False的相關(guān)資料,通過(guò)示例代碼給大家進(jìn)行了解惑,讓對(duì)這兩個(gè)值有所疑惑的朋友們能有起到一定的幫助,需要的朋友下面來(lái)一起看看吧。
    2021-09-09
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門

    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ǔ)言:分治問(wèn)題源碼分享

    純C語(yǔ)言:分治問(wèn)題源碼分享

    這篇文章主要介紹了純C語(yǔ)言:分治問(wèn)題源碼,有需要的朋友可以參考一下
    2014-01-01
  • 一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用

    一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用

    這篇文章主要介紹了二分查找算法在C語(yǔ)言程序中的使用示例,文中最后提到了使用二分查找法一個(gè)需要注意的地方,需要的朋友可以參考下
    2021-08-08
  • C++中的6種構(gòu)造函數(shù)舉例詳解

    C++中的6種構(gòu)造函數(shù)舉例詳解

    這篇文章主要介紹了C++中的6種構(gòu)造函數(shù)的相關(guān)資料,C++中構(gòu)造函數(shù)用于類對(duì)象初始化,類型包括默認(rèn)構(gòu)造函數(shù)、參數(shù)化構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)等,默認(rèn)構(gòu)造函數(shù)通常不需要參數(shù),編譯器會(huì)自動(dòng)生成,除非存在其他構(gòu)造函數(shù),需要的朋友可以參考下
    2024-10-10
  • 使用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ù))

    這篇文章主要介紹了使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù)),需要的朋友可以參考下
    2014-03-03
  • C語(yǔ)言跳轉(zhuǎn)瀏覽器打開(kāi)指定URL的操作代碼

    C語(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-04
  • C語(yǔ)言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)

    C語(yǔ)言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)

    這篇文章主要介紹了C語(yǔ)言如何利用輾轉(zhuǎn)相除法求最大公約數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 詳解C語(yǔ)言中的Static關(guān)鍵字

    詳解C語(yǔ)言中的Static關(guān)鍵字

    這篇文章主要為大家介紹了C語(yǔ)言中Static關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C語(yǔ)言中的文件操作詳解

    C語(yǔ)言中的文件操作詳解

    這篇文章主要介紹了C語(yǔ)言中的文件操作詳解,使用文件可以將數(shù)據(jù)直接存放到電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2022-07-07

最新評(píng)論