C语言获取文件长度的两种方法

描述

C语言中没有直接获取文件长度的接口,但是我们可以使用标准库提供的函数来间接的获取文件长度。这里提供两种方法。

使用C标准库获取文件长度

不论你使用的是哪个操作系统,只要该操作系统支持C标准库,那么就可以通过下述代码获取文件长度:

 

#include 

/**
 * @brief 获取文件长度
 *
 * @param file_name 文件名(包含路径)
 *
 * @return -1:获取文件长度失败 其他值:文件长度
 *
 * @version
 * 1, 2023-08-09, AilsonJack, Created function
 */
long get_file_len(const char *file_name)
{
    FILE *filep;
    long len;

    // 打开文件
    filep = fopen(file_name, "rb");
    if (filep == NULL)
    {
        printf("fopen %s failed!
", file_name);
        return -1;
    }

    // 移动文件指针到文件末尾
    fseek(filep, 0, SEEK_END);

    // 获取文件长度
    len = ftell(filep);

    // 关闭文件
    fclose(filep);

    return len;
}

 

使用C标准库获取文件长度的测试结果如下图所示:

Linux操作系统

Snipaste_2023-09-23_10-00-18

使用Linux的系统调用获取文件长度

在Linux操作系统下,可以使用stat函数来获取文件信息,其中st_size字段表示文件的长度,代码如下所示:

 

#include 
#include 

/**
 * @brief 获取文件长度
 *
 * @param file_name 文件名(包含路径)
 *
 * @return -1:获取文件长度失败 其他值:文件长度
 *
 * @version
 * 1, 2023-08-09, AilsonJack, Created function
 */
long get_file_len(const char *file_name)
{
    struct stat st;

    // 获取文件信息
    if (stat(file_name, &st) == -1)
    {
        perror("无法获取文件信息");
        return -1;
    }

    // 检查文件类型
    if (!S_ISREG(st.st_mode))
    {
        printf("%s 不是一个常规文件!
", file_name);
        return -1;
    }

    return st.st_size;
}






审核编辑:刘清
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分