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标准库获取文件长度的测试结果如下图所示:
使用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;
}
欢迎关注博主的公众号:如果文中有什么问题欢迎指正,毕竟博主的水平有限。
如果这篇文章对你有帮助,记得点赞和关注博主就行了。
注:转载请注明出处,谢谢!