不要使用fseek-ftell获取二进制文件的大小

如果一个文件是文本文件,我们一般使用

FILE *pf = fopen("file", "r");                    

fseek( pf, 0, SEEK_END );

int size = ftell( pf );

获取文件大小,如果是打开二进制文件,则是

FILE *pf = fopen("file", "rb");   

但是对于二进制文件这个方法不一定可行:

1. 对于小文件,这个方法可行,测试大小8M多的文件

2. 对于大文件,这个方法不可行,测试大小为25G的文件,获取到大小为4百多M

原因是

fseek( pf, 0, SEEK_END );

对于二进制文件是不可预知的行为。

 

我们可以使用

#include <sys/stat.h>
struct stat st;
stat(filename, &st);
size = st.st_size;

 

如果是大过4G的文件,则使用

#include <sys/stat.h>

struct stat64 st;

stat64(filename, &st);

size = st.st_size;

 

windows下面使用 _stat64

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *