关于获得文件超过2G,超过4G文件大小的方法

获得文件属性(大小等)的函数有stat/fstat/lstat,头文件为:

#include
#include

int stat(const char *restrict pathname, struct stat *restrict buf);
提供文件名字,获取文件对应属性。
int fstat(int filedes, struct stat *buf);
通过文件描述符获取文件对应的属性。文件打开后这样操作
int lstat(const char *restrict pathname, struct stat *restrict buf);
连接文件
对于一般的文件(小于2G),用int类型来表示返回的文件大小(st_size),当文件超过2G,就会出现问题,首先类型由int变成unsigned int /long(可以表示小于4G的文件)或long long(超过4G的文件)。这样编译后 ,还是不能正确得到文件大小,我的解决方法是在编译的时候用gcc  -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE 源文件,同时运用这两个解决方案,就可以获取大文件的文件属性了。

unsigned long get_filesize(const char *filename)

  3 {
  4     struct stat buf;
  5     if((stat(filename,&buf))<0)
  6     {
  7        fprintf(stderr,"EACCES:%s\n",strerror(EACCES));
  8        errno=ENOENT;
  9        perror(filename);
 10        return 0;
 11     }
 12     return (usigned long)buf.st_size;

 13 }


你可能感兴趣的:(关于获得文件超过2G,超过4G文件大小的方法)