首页 > 代码库 > C语言 获取文件大小的方法

C语言 获取文件大小的方法

作者 : 卿笃军

方法一:

获得文件大小需要用到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,1和2.
简言之:
fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。

参考文章:百度百科,fseek(),http://baike.baidu.com/view/656696.htm


ftell()函数:

原型: longftell(FILE*stream);

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

参考文章:百度百科,ftell(),http://baike.baidu.com/view/656699.htm

 1 #include <stdio.h>
 2 #include <stdlib.h>  //exit(0);
 3 
 4 int main()
 5 {
 6     FILE *fp =NULL;
 7     long n = 0;
 8 
 9     if ((fp = fopen("Q.txt","r")) == NULL)
10     {
11         printf("文件打开失败.\n");
12         exit(0);
13     }
14     fseek(fp,0,2);   //指针:移动到文件尾部
15     n = ftell(fp);   //返回指针偏离文件头的位置(即文件中字符个数)
16 
17     printf("%ld\n",n);
18 
19     return 0;
20 }

方法二:

这里使用到 struct _stat结构体

st_atime  : 上次访问该文件的时间

st_ctime  : 文件创建时间

st_dev      : 文件所在磁盘

st_mtime :最后一次修改文件时间

st_size     : 文件大小

//...... 所有参数请参见MSDN

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/stat.h>
 4 #include <time.h>
 5 
 6 int main()
 7 {
 8     struct _stat buf;   //注意创建一个结构体
 9     int result;
10     
11     result = _stat( "Q.txt", &buf );
12     
13     printf( "文件大小     : %ld\n", buf.st_size );
14     printf( "所在磁盘     : %c:\n", buf.st_dev + A );
15     printf( "创建时间     : %s", ctime( &buf.st_atime ) );
16 
17     return 0;
18 }