笔者在日常项目中经常需要使用C语言求一个文件的大小,特整理了一些常用的方法,通过测试代码的形式展示出来,话不多说,直接上代码:
#include
#include
#include
#include
#include
#include
#include
#define TEST_FILE "./IMG_3458.JPG"
// call stat() function
static int get_file_size_by_stat(const char *file)
{
int ret;
struct stat file_info;
printf("enter %s() >>>\n", __func__);
ret = stat(file, &file_info);
return (!ret) ? file_info.st_size : -1;
}
// call lstat() function
static int get_file_size_by_lstat(const char *file)
{
int ret;
struct stat file_info;
printf("enter %s() >>>\n", __func__);
ret = lstat(file, &file_info);
return (!ret) ? file_info.st_size : -1;
}
// call fstat() function
static int get_file_size_by_fstat(const char *file)
{
int ret;
int fd;
struct stat file_info;
printf("enter %s() >>>\n", __func__);
fd = open(file, O_RDONLY);
if (fd < 0) {
ret = -1;
perror("open error");
goto exit_entry;
}
ret = fstat(fd, &file_info);
exit_entry:
if (fd >= 0) {
close(fd);
}
return (!ret) ? file_info.st_size : -1;
}
// call lseek() function
static int get_file_size_by_lseek(const char *file)
{
int ret;
int fd;
printf("enter %s() >>>\n", __func__);
fd = open(file, O_RDONLY);
if (fd < 0) {
ret = -1;
perror("open error");
goto exit_entry;
}
ret = lseek(fd, 0, SEEK_END);
exit_entry:
if (fd >= 0) {
close(fd);
}
return ret;
}
// call fseek() and ftell() function
static int get_file_size_by_fseek_and_ftell(const char *file)
{
int ret;
FILE *fp;
printf("enter %s() >>>\n", __func__);
fp = fopen(file, "r");
if (!fp) {
ret = -1;
perror("fopen error");
goto exit_entry;
}
ret = fseek(fp, 0, SEEK_END);
if (ret < 0) {
ret = -1;
perror("fseek error");
goto exit_entry;
}
ret = ftell(fp);
exit_entry:
if (fp) {
fclose(fp);
}
return ret;
}
static int shell_cmd_excute(const char *cmd, char *result, int size)
{
int ret;
FILE *fp;
fp = popen(cmd, "r");
if (!fp) {
ret = -1;
perror("popen error");
goto exit_entry;
}
ret = fread(result, 1, size, fp);
if (ret < 0) {
ret = -1;
perror("fseek error");
goto exit_entry;
}
ret = 0;
exit_entry:
if (fp) {
pclose(fp);
}
return ret;
}
// call shell cmd
static int get_file_size_by_shell_cmd(const char *file)
{
int ret;
char cmd[128];
char result[16];
printf("enter %s() >>>\n", __func__);
snprintf(cmd, sizeof(cmd), "ls -al %s | awk '{print $5}'", file);
printf("shell cmd: %s\n", cmd);
ret = shell_cmd_excute(cmd, result, sizeof(result));
if (!ret && strlen(result)) {
ret = atoi(result);
}
return ret;
}
int main(int argc, const char *argv[])
{
int file_size;
printf("enter %s() >>>\n", __func__);
file_size = get_file_size_by_stat(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
file_size = get_file_size_by_lstat(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
file_size = get_file_size_by_fstat(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
file_size = get_file_size_by_lseek(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
file_size = get_file_size_by_fseek_and_ftell(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
file_size = get_file_size_by_shell_cmd(TEST_FILE);
printf("file_size=%d\n\n\n", file_size);
return 0;
}
测试记录如下:
被测试文件,在windows下查看大小为:
如上测试代码,编译出来,运行结果如下所示,测试证明,所有的获取方法均是有效的。
好了,本次使用C语言获取文件大小的方法就介绍到这里,如果你有更加方便、快捷、高效的方法,也可以在评论席告知,感激不尽。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
10992浏览量
206745 -
C语言
+关注
关注
180文章
7534浏览量
128852 -
文件
+关注
关注
1文章
540浏览量
24402
发布评论请先 登录
相关推荐
Linux操作系统-C语言编程入门介绍在LINUX 下进行C 语言编程所需要的基础知识.在这篇
Linux操作系统-C语言编程入门介绍在LINUX 下进行C 语言编程所需要的基础知识.
发表于 12-08 09:56
[推荐]linux下的c语言编程简介
基本的了解。第二章从本章开始,我们将进入Linux充满挑战的C语言编程世界,首先介绍的是文本编辑器。文本编辑器可以说是计算机最基本的应用,修改设置文 件、编写程序或者建立文件都需要用到
发表于 04-29 13:50
汇编语言文件和c语言文件连接问题
以前做嵌入式系统移植,遇到c语言嵌汇编的问题,当时只走了捷径直接用了开发环境的优势,可以直接在c语言中嵌入汇编,可我知道这不是通用的方法,有
发表于 04-14 08:43
C语言入门,C语言学习方法
初学C语言的朋友应该首先了解C语言关键的核心概念(结构化、三个执行流程、优先级、指针、文件、共用体、函数、作用域、重载等 ),只有弄明白了这
发表于 09-10 16:24
为什么又说Linux驱动不是C语言呢
说到Linux驱动,尤其是嵌入式Linux驱动,大家可能会望而却步,因为入门太难!很多书上或课程基本是这样的:一上来给我们展示一大堆高深莫测的代码,感觉是C语言,又感觉不是
发表于 11-05 07:13
elmfat文件系统如何获取文件大小呢?
rtt 使用elmfat文件系统 如何获取文件大小呢 ?f_size() 无法使用,elmfat能使用fatfs里面支持的api么
发表于 03-14 10:25
Linux基础教程之如何在linux不解压tar.gz文件查看的文件大小资料概述
本文档的主要内容详细介绍的是Linux基础教程之如何在linux不解压tar.gz文件查看的文件大小详细程序资料免费下载。
发表于 10-31 17:06
•2次下载
评论