嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > C语言-获取文件长度

C语言-获取文件长度

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

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

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

#include <stdio.h>

/**
 * @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!\r\n", file_name);
        return -1;
    }

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

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

    // 关闭文件
    fclose(filep);

    return len;
}

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

Snipaste_2023-09-23_10-00-18

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

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

#include <stdio.h>
#include <sys/stat.h>

/**
 * @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 不是一个常规文件!\r\n", file_name);
        return -1;
    }

    return st.st_size;
}
迎关注博主的公众号:

如果文中有什么问题欢迎指正,毕竟博主的水平有限。

如果这篇文章对你有帮助,记得点赞和关注博主就行了。

注:转载请注明出处,谢谢!