Fseek()
fseek函数功能是将文件指针移动到指定的地方,因此可以通过fseek重置文件指针的位置。
函数原型:
int fseek(FILE *stream, long offset, int origin);
参数说明:
stream : 待移动的FILE型指针变量
offset:偏移量,每次移动多少个字节
origin: 指针开始的位置
返回值: 如果fseek ()返回值为0,表示执行成功,如果返回值为非0, 则执行失败。
尽管随着读取文件的进行,origin和文件指针的位置都会随着发生变化,但是在调fseek()函数时,给它传入的origin参数只能是以下三种之一:
SEEK_CUR : 文件指针目前的位置
SEEK_END : 文件末尾处
SEEK_SET : 文件开始处
Ftell
ftell 函数获取一个文件指针的当前位置
函数原型:
long ftell(FILE *stream);
参数说明:
stream : 目标参数的文件指针
ftell 函数目标文件指针的当前位置,如果流是以文本模式打开的, 那么ftell的返回值可能不是文件指针在文件中距离开始文件开始位置的物理字节偏移量,因为文本模式将会有换行符转换。如果ftell函数执行失败,则会返回-1L。
fseek和ftell组合使用可以计算出二进制文件的大小:
例子:
FILE* modelFp = fopen(modelPath, "rb");
int ret;
long curpos;
curpos = ftell(modelFp);
std::cout<<"curpos: "<<curpos<<std::endl;
fseek(modelFp, 0, SEEK_END);
const long modelSize = ftell(modelFp);
std::cout<<"modelSize: "<<modelSize<<std::endl;