筆者在日常項(xiàng)目中經(jīng)常需要使用C語言求一個(gè)文件的大小,特整理了一些常用的方法,通過測試代碼的形式展示出來,話不多說,直接上代碼:
#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下查看大小為:
如上測試代碼,編譯出來,運(yùn)行結(jié)果如下所示,測試證明,所有的獲取方法均是有效的。
好了,本次使用C語言獲取文件大小的方法就介紹到這里,如果你有更加方便、快捷、高效的方法,也可以在評(píng)論席告知,感激不盡。
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
Linux
+關(guān)注
關(guān)注
87文章
11212瀏覽量
208721 -
C語言
+關(guān)注
關(guān)注
180文章
7595瀏覽量
135878 -
文件
+關(guān)注
關(guān)注
1文章
561瀏覽量
24671
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
C語言-文件編程
這篇文章介紹C語言的文件編程函數(shù),案例代碼是在Linux環(huán)境下運(yùn)行測試的分別介紹了C語言標(biāo)準(zhǔn)庫的
Linux操作系統(tǒng)-C語言編程入門-pdf
Linux操作系統(tǒng)-C語言編程入門介紹在LINUX 下進(jìn)行C 語言編程所需要的基礎(chǔ)知識(shí).
發(fā)表于 12-08 09:55
?193次下載
linux下c語言編程pdf
linux下c語言編程內(nèi)容為::基礎(chǔ)知識(shí),進(jìn)程介紹,文件操作,時(shí)間概念,信號(hào)處理,消息管理,線程操作,網(wǎng)絡(luò)編程,Linux 下
發(fā)表于 12-08 10:00
?0次下載
C語言教程之獲取當(dāng)前日期與時(shí)間
C語言教程之獲取當(dāng)前日期與時(shí)間,很好的C語言資料,快來學(xué)習(xí)吧。
發(fā)表于 04-25 16:09
?0次下載
C語言教程之獲取Caps Lock鍵狀態(tài)
C語言教程之獲取Caps Lock鍵狀態(tài),很好的C語言資料,快來學(xué)習(xí)吧。
發(fā)表于 04-25 17:07
?0次下載
Linux下C語言編程入門教程詳細(xì)說明
本文是Linux 下C 語言編程入門教程。主要介紹了Linux 的發(fā)展與特點(diǎn)、C語言的基礎(chǔ)知識(shí)、
發(fā)表于 08-25 18:05
?39次下載
C語言_Linux基本命令與C語言基礎(chǔ)
這篇文章介紹在Linux環(huán)境下學(xué)習(xí)C語言搭建基本的環(huán)境過程,了解基礎(chǔ)的幾個(gè)命令使用方法,了解Linux下用戶權(quán)限配置,標(biāo)準(zhǔn)main函數(shù)傳參方
深入探索Linux中的C語言
Linux 中的基礎(chǔ)頭文件、C 語言標(biāo)準(zhǔn)以及可移植操作系統(tǒng)(POSIX)標(biāo)準(zhǔn),C 語言是和
hex文件如何查看原c語言代碼
是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級(jí)編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程
評(píng)論