一、获取文件系统属性,读取文件大小。
在C语言库函数中有stat函数,可以获取文件的基本信息,其中就有文件大小。
#include <sys/stat.h>//包含头文件。int file_size(char* filename)//获取文件名为filename的文件大小。{ struct stat statbuf; int ret; ret = stat(filename,&statbuf);//调用stat函数 if(ret != 0) return -1;//获取失败。 return statbuf.st_size;//返回文件大小。}
二、通过C语言文件操作,获取文件大小。
以fopen打开的文件,通过fseek可以定位到文件尾,这时使用ftell函数,返回的文件指针偏移值,就是文件的实际大小。
代码如下:
#include //包含头文件。int file_size(char* filename)//获取文件名为filename的文件大小。{ FILE *fp = fopen(filename, "rb");//打开文件。 int size; if(fp == NULL) // 打开文件失败 return -1; fseek(fp, 0, SEEK_END);//定位文件指针到文件尾。 size=ftell(fp);//获取文件指针偏移量,即文件大小。 fclose(fp);//关闭文件。 return size;}
三、如果使用open打开文件,使用lseek来获取文件的大小
int fd = open(char *filename,int falgs);//这里的参数自行设置
if(fd == -1)
{
printf("文件打开失败\n");
return -1;
}
//lseek函数成功的话,返回的是从文件开始到文件此时的偏移量之间的大小
long length = lseek(fd,0,SEEK_END);//回到文件的末尾,故返回的是文件的大小
printf("%ld\n",length);//输出这个文件的大小
return 0;
四、注意事项:
第一种方式为直接读取文件信息,无需打开文件,所以更高效。
五、测试代码:
以上接口函数,均可以用如下主函数测试:
#include int main(){ char s[100]; int size; scanf("%s",s);//输入文件名 size = file_size(s);//获取文件大小。 if(size == -1) printf("无法获取文件大小,可能文件并不存在或不可读\n"); else printf("文件大小为%d\n", size); return 0;}