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)就是使文件指针到文件头。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)