牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2012-02-09 投稿人: 浏览次数:144

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

#include<sys/types.h>
#include<sys/stat.h>

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 ",strerror(EACCES));
  8        errno=ENOENT;
  9        perror(filename);
 10        return 0;
 11     }
 12     return (usigned long)buf.st_size;

 13 }


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。