http://oucmsc.blog.163.com/blog/static/12634032820121078371420/
大四的时候,做毕业设计,在读写SEGY文件时需要获取所读文件的大小,但是当时并没有直接解决这个问题,而采用了手动标注炮数的方法。
注:unsigned long get_file_size(const char *filename){ unsigned long size; FILE* fp = fopen( filename, "rb" ); if(fp==NULL){ printf("ERROR: Open file %s failed.\n", filename); return 0; } fseek( fp, 0L, SEEK_END ); size=ftell(fp); fclose(fp); return size; }
文件的上述属性,可以通过一个stat函数来获取。stat { mode_t st_mode; //文件对应的模式,文件,目录等 ino_t st_ino; //inode节点号 dev_t st_dev; //设备号码 dev_t st_rdev; //特殊设备号码 nlink_t st_nlink; //文件的连接数 uid_t st_uid; //文件所有者 gid_t st_gid; //文件所有者对应的组 off_t st_size; //普通文件,对应的文件字节数 time_t st_atime; //文件最后被访问的时间 time_t st_mtime; //文件内容最后被修改的时间 time_t st_ctime; //文件状态改变时间 blksize_t st_blksize; //文件内容对应的块大小 blkcnt_t st_blocks; //伟建内容对应的块数量 };
第一个参数是文件名,第二个参数是指向一个stat结构的指针。stat(const char *restrict path, struct stat *restrict buf);
在进行大文件处理时,显然需要采取后者。unsigned long get_file_size(const char *filename){ struct stat buf;
if(stat(filename, &buf)<0){ return 0; }
return (unsigned long)buf.st_size; }