c语言:若想把文件位置指针从当前位置后移动若干字节,可调用( )函数来实现

c语言:若想把文件位置指针从当前位置后移动若干字节,可调用( )函数来实现,第1张

fseek()

fseek

函数名: fseek

功 能: 重定位流上的文件指针

用 法: int fseek(FILE stream, long offset, int fromwhere);

程序例:

#include <stdioh>

long filesize(FILE stream);

int main(void)

{

FILE stream;

stream = fopen("MYFILETXT", "w+");

fprintf(stream, "This is a test");

printf("Filesize of MYFILETXT is %ld bytes\n", filesize(stream));

fclose(stream);

return 0;

}

long filesize(FILE stream)

{

long curpos, length;

curpos = ftell(stream);

fseek(stream, 0L, SEEK_END);

length = ftell(stream);

fseek(stream, curpos, SEEK_SET);

return length;

}

编辑词条

在读取数据成功时会移动。

C语言中,对文件指针会产生移动作用的函数包括:

1 读函数: fread, fgetc, fgets, fscanf等。执行读 *** 作时,指针向后移动,移动距离为实际读到的字节数。

2 写函数:fwrite, fputc, fputs,fprintf等。执行写 *** 作时,指针向后移动,移动距离为实际写入的字节数。

3 指针移动函数:fseek, rewind等。按照函数功能,自由移动文件指针。

fscanf在读取数据成功时,即返回值>0时,会移动文件指针。如返回值<=0,代表读 *** 作失败,不会产生指针移动。

设置“输入流指针控制字”的成员函数:

istream&istream::seekg(streampos);

//指针直接定位

istream&istream::seekg(streamoff, ios::seek_dir);

//指针相对定位

long

istream::tellg(); //返回当前指针位置

流的指针位置类型streampos和流的指针偏移类型streamoff定义为长整型,也就是可访问文件的最大长度为4G。例:

datafileseekg(-20L,ios::cur);

//表示将文件定位指针从当前位置向文件头部方向移20个字节。

datafileseekg(20L,ios::beg);

//表示将文件定位指针从文件头向文件尾方向移20个字节。

datafileseekg(-20L,ios::end);

//表示将文件定位指针从文件尾向文件头方向移20个字节。

tellg()和seekg()往往配合使用。

//指针不可移到文件头之前或文件尾之后。

如何定位每一行,这个有点困难,因为不一定每行的偏移量都相同,要么就先计算出每行的偏移量,然后在计算出总偏移量,用上边的seekg函数来定位偏移位置。

还有一种比较笨的办法就是,从开头读,每次读一行,直到读到你需要的那行时候再把读取的数据取出来,getline就是每次读一行,多次调用就可以每行循环下读。

至于你问怎么获得这个随机的行数,我想这个不用我说了吧,获取一个随机的数,用rand函数就行了,先获取出来你要读取的行数,然后按照上边的方法来进行。

函数rewind(fp)的作用是:使文件位置指针重新定位到fp文件的开始位置。

函数rewind()是将将文件内部的位置指针重新指向一个流(数据流/文件)的开头

注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。

rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET);

用 法: void rewind(FILE stream);

头文件:stdioh

返回值:无

写一个空文件,自然就是从文件头开始写的。如果写入一个非空文件,则需要使用文件指针函数seekp,假设写文件为outfile,outfileseekp(0,ios::beg)就是使文件指针到文件头。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11680272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存