一.linux下获取文件大小的两种方法
- 通过移动文件读写位置获取文件大小,但是在读取大文件时,容易崩溃
- 使用posix系统上提供的stat()函数获取文件的各种信息,其中就包括文件字节大小信息,速度快
二.源码
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
/*
** 获取文件大小的两种方法
*/
//通过fseek函数移动文件流的读写位置
size_t get_filebytes1(const char *filename)
{
size_t file_size=0;
FILE *fp;
fp=fopen(filename,"r");
if(NULL==fp)
printf("Read file error\n");
else
{
printf("Open file success\n");
fseek(fp,0,SEEK_END); //将文件读写指针移动到文件尾
file_size=ftell(fp); //ftell函数获取从文件尾移动到文件开头的偏移量
pclose(fp);
}
return file_size;
}
//通过系统stat结构体获取文件信息
size_t get_filebytes2(const char *filename)
{
size_t flag;
size_t file_size=0;
struct stat statbuf;
flag=stat(filename,&statbuf); //使用stat()获取文件信息
if(flag!=0)
printf("Get file information error\n");
else
{
printf("Get file information success\n");
file_size=statbuf.st_size; //获取文件大小
}
return file_size;
}
int main(int argc,char *argv[])
{
char *filename=argv[1];
size_t file_size;
if(argc<2)
printf("Usage:%s [filename]\n",argv[0]);
else
{
file_size=get_filebytes2(filename);
printf("File is %ld bytes\n",file_size);
}
}