首页 理论教育设置文件读写位置指针

设置文件读写位置指针

【摘要】:设置文件内部读写位置指针的作用是将文件内部读写位置指针从某一个起始位置移动(设置)到另外一个指定的位置,使用C标准库函数fseek可以完成此功能。表7.2标准库函数fseek的origin参数值及意义函数的功能是:将由stream所关联文件的内部读写位置指针从origin指定的起始位置开始移动offset所指定的字节数,当参数offset为正值时向文件尾方向移动,当参数offset为负值时向文件头方向移动。

设置文件内部读写位置指针的作用是将文件内部读写位置指针从某一个起始位置移动(设置)到另外一个指定的位置,使用C标准库函数fseek可以完成此功能。标准库函数fseek的原型如下:

int fseek(FILE*stream,long offset,int origin);

标准库函数fseek的参数意义是:

·stream:用以指定被设置内部读写位置指针的文件;

·offset:是一个长整型量,表示的文件内部读写位置指针需移动的字节位移量;

·origin:指定文件内部读写位置指针移动的起始位置,其值和意义见表7.2。

表7.2 标准库函数fseek的origin参数值及意义

函数的功能是:将由stream所关联文件的内部读写位置指针从origin指定的起始位置开始移动offset所指定的字节数,当参数offset为正值时向文件尾方向移动,当参数offset为负值时向文件头方向移动。注意,无论指定的移动距离为多远,文件内部读写位置指针只能在文件的数据区中移动。

【例7.13】 数据文件mydata.txt中存放有一个5行10列二维数组的内容,编写程序找出第4行(3号行)中的最大值。

提示:可以用前面例7.10的程序构造数据文件,用例7.11程序查看文件数据。(www.chuimin.cn)

上面程序中,打开文件后首先计算出所需要数据的位置(离文件头的距离),然后通过标准库函数fseek移动读写位置指针到指定位置,读出数据进行后续处理。

【例7.14】 模仿操作系统的COPY命令,编写一个实现拷贝功能的程序(要求使用数据块拷贝的方式)。

例7.14的程序运行时,用变量copysize表示拷贝数据的长度(copysize变量同时用于控制拷贝工作是否继续进行),用字符数组buffer作为拷贝的数据缓冲区,每正确从源文件中读出一块数据时,直接将其拷贝到目标文件中,并用变量offset记录文件数据拷贝成功的结束位置(当拷贝出错时即是出错处的起始位置);当某次读取数据块出错时,用fseek函数将文件内部读写位置指针移回到上次成功读取数据的结束位置(由变量offset指出),然后将拷贝长度折半后进入下一次拷贝过程。反复进行上述过程直至数据拷贝完成为止。