随机读写文章目录前的fseek函数ftellrewind函数
随机读写前面
序贯读写,输入和输出只能序贯读写。 这样非常笨拙,为了更好地操作文件,出现了另一个文件操作函数,从文件中随机读取。
随机读写不是随便读写,而是按照操作者的意思读写文件的某个地方。
为了便于理解,直接访问代码:
例如,我们现在读取文件中的三个字符;
打开int main ()//文件file*pf=fopen ) ' data.txt ',' rb ' ); if(pf==null ) printf('%sn ',strerror(Errno ); 返回1; //文件打开失败,失败后返回}char arr={ 0 }; ARR=fgetc(pf; printf(%c(n )、arr ); ARR=fgetc(pf; printf(%c(n )、arr ); ARR=fgetc(pf; printf(%c(n )、arr ); //关闭文件fclose(pf ) pf=NULL; 返回0; }
因为第一个文件指针指向a,所以fgetc读取a字符,读取结束后通过将指针向后移动并指向b来内按,最后读取c字符后,指针指向c的后面。
总结:
如果一个字符也不读写,指针就会向后移动。
你为什么读写笨拙?
假设我们读写完了c字
现在读c后面的文字。 我该怎么读写呢?
所以你可以随机读写
介绍随机读写的几个函数
基于fseek函数的流位置指示器重定位
将与流相关联的位置指示器设置为新位置。
intfseek(file*stream,long offset,int origin ); 第一个参数是移动位置的文件指针,第三个参数是初始位置,而不是指向第一个元素的指针。 第二个参数是偏移量。 向左走是减法,向右走是加法
如果对fseek函数的调用成功,则返回0。 如果调用失败,则返回非零值。第三个参数有一下三中情况:
参数格式的含义SEEK_CUR文件指针的当前位置SEEK_END文件末尾的SEEK_SET文件的开头出现例题。
现在,如果指针指向c字符,接下来读取字符b的话,
有三种方法。1.让文件指针相对于其当前位置向左偏移1个字节
seek(pf,-1,SEEK_CUR ); //调整文件指针的位置ch=fgetc(pf )并导入//字符' b'printf(%c(n ),ch );2.让文件指针相对于文件开头右偏移1个字节(即指向文件开头)。
seek(pf,1,SEEK_SET ); //调整文件指针的位置ch=fgetc(pf )并导入//字符' b'printf(%c(n ),ch );3.让文件指针相对于文件末尾向前偏移6个字节。
seek(pf,-5,SEEK_END ); //调整文件指针的位置ch=fgetc(pf )并导入//字符' b'printf(%c(n ),ch ); 为了更清楚地查看文件指针位于何处,ftell出现了一个ftell函数,用于计算相对于当前文件指针起始位置的偏移。
长流(文件*流); ftell函数的参数是文件指针。 如果成功调用ftell函数,则返回相对于文件指针开始位置的偏移。 如果调用失败,则返回- 1。
长偏移=ftell (pf;
rewind函数voidrewind(file*stream ); rewind函数的作用是将传递的文件指针移回文件的开头。
如果要指向字符a,请直接使用此函数
rewind(pf; //调整文件指针的位置ch=fgetc(pf )并读取到//字符' a'printf(%c(n ),ch );用fseek函数与ftell函数求文件大小