C语言获取文件大小

222 阅读1分钟

方法一:

获得文件大小需要用到2个函数:fseek(), ftell(),介绍如下:

fseek()函数:
 原型:intfseek(FILE *stream, long offset, int fromwhere);
 参数:

 stream: 第一个参数stream为文件指针
 offset : 第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
 fromwhere: 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
 SEEK_SET: 文件开头
 SEEK_CUR: 当前位置
 SEEK_END: 文件结尾

 其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,12.
 简言之:

 fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
 fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
 fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。
 ftell()函数:

 原型: longftell(FILE *stream);
 功能:返回当前文件位置,也就是说返回FILE指针当前位置。(也就是偏离文件首字符个数)

示例代码如下:

#include <STDIO.H>
#include <STDLIB.H>  //exit(0);

int main()
{
  FILE *fpr = NULL;
  long n = 0;
  if ((fpr = fopen("/home/zhangzhixiang/zhangzhixiang", "rb")) == NULL) {
        printf("cannot open this file");
        return 0;
    }
    fseek(fpr, 0, SEEK_SET); //指针:移动到文件头部
    long begin = ftell(fpr);
    fseek(fpr, 0, SEEK_END);  //指针:移动到文件尾部
    long end = ftell(fpr);
    long fileSize = end - begin;
    return 0;
}

方法二:

这里使用到 struct _stat结构体,介绍如下:

st_atime : 上次访问该文件的时间
st_ctime : 文件创建时间
st_dev : 文件所在磁盘
st_mtime :最后一次修改文件时间
st_size : 文件大小
//…… 所有参数请参见MSDN
#include <STDIO.H>
#include <SYS types.h>
#include <SYS stat.h>
#include <TIME.H>

int main()
{

    struct _stat buf;   //注意创建一个结构体
  int result;
  result = _stat( "Q.txt", &buf );
  printf ("文件大小     : %ld\n", buf.st_size );
  printf ("所在磁盘     : %c:\n", buf.st_dev + 'A' );
  printf ("创建时间     : %s", ctime(&buf.st_atime));
  return 0;
}

到此 C语言获得文件大小介绍完成。