c语言fseek函数,C语言中fseek函数的第2个和第3个参数的具体含义?
c语言fseek函数,C语言中fseek函数的第2个和第3个参数的具体含义?详细介绍
本文目录一览: 在C语言中fseek()的功能
功能
重定位流(数据流/文件)上的文件内部位置指针
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
实例
#include
long filesize(FILE *stream);
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT 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;
}
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。
当打开一个文件流后,fseek用来在流中定位,即操作文件指针,这样可以达到随机访问文件的目的,具体的可以参考很多C语言的教材,动手写程序才是关键。
fseek()是重定位流(数据流/文件)上的文件内部位置指针。
注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。
扩展资料:
注意事项
fseek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fseek函数也可以这样理解,相当于在文件当中定位。
这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。
fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能确保结果符合预期。
参考资料来源:百度百科-fseek
C语言中fseek函数的第2个和第3个参数的具体含义?
fseek函数:
int
fseek(fp,offset,base)
FILE
*fp;
long
offset;
int
base;
其中,第二个参数offset是位移量,第三个参数base是基准
函数的功能是
将fp所指向的文件位置指针移到以base所指出的位置为基准、以offset为位移量的位置
c语言:这两个语句什么意思 fseek(fp,0L,0); fprintf(fp,%d ,a
fseek函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。
fprintf是C/C++中的一个格式化写—库函数,位于头文件
中,其作用是格式化输出到一个流/文件中;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函数根据指定的格式(format)向输出流(stream)写入数据(argument)。
fseek(fp,0L,0);应该是这样吧,总是为文件指针 指向文件的第一个位置。
fseek()函数
功能:移动文件位置指针到指定的位置
一般形式:fseek(文件指针,位移量,起始点);
其中位移量表示位置指针移动的字节数,要求为long类型,以便文件长度大于64KB时不会出错
起始点表示从何处开始计算位移量,规定有三种:文件开头0,当前位置1和文件结尾2
C语言中,fseek函数怎么控制移动的方向?怎么往前或往后,最好能有个例子。 谢谢!
fseek有三个参数,第1个是文件句柄,通过打开文件时得到;第2个就是移动的字节数,这个数可以是正的,就是向后(文件尾部)移动,也可以是负的,即向前(文件头部)移动;第3个参数指明从哪里移动,如果写SEEK_SET就是从文件头部移动多少字节,如果写SEEK_END则是从尾部开始移动,SEEK_CUR则是从当前位置移动。
比如
要将文件指针移动到文件开始的第24字节位置:fseek(fp,24,SEEK_SET);
移动到文件尾部向前50字节:fseek(fp,-50,SEEK_SET);
在当前位置移动8个字节(跳过8个字节数据):fseek(fp,8,SEEK_CUR);
在当前位置向前移动16个字节(准备重新读取数据):fseek(fp,-16,SEEK_CUR);
c语言中的fseek函数如何定位到下一行?
fseek本身无法定位下一行。
但是可以通过自定义函数来处理。
#include
int getNextLinePos(FILE *p)
{
int ch;
int curpos = 0;
ch=getc(p);
curpos = ftell(p);
while(ch!=EOF)
{
putchar(ch);
ch=getc(p);
if(ch == '\n')
{
break;
}
}
return (ftell(p) - curpos + 1);
}
int main(void)
{
FILE *fp;
fp=fopen("FileDemo.tt","r");
if (fp==NULL)
{
printf("I can't open file!\n");
return 0;
}
fseek(fp, getNextLinePos(fp), SEEK_SET); // 指向下一行
return 0;
}
C语言ab+方式打开文件以及fseek函数
的文件用ab+方式打开,a的意思就是追加,声明原内容不会变化。
如果要修改原有内容,应该以wb+方式打开,这种方式,是包含了a的,也就是,可以向末尾追加内容。
我记得ab+是用于读取文件和仅在文件末尾新增内容的,前面的数据确实会受到保护。如果想修改之前的内容,请使用wb(只写)或wb+(可读可写)
打开文件可以用fopen。
函数原型:FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
打开文件实例:
#include
#define F_PATH "d:\\myfile\\file.dat"
int main(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"ab+");
if(NULL==fp)
{
return -1;//要返回错误代码
}
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
return 0;
}
fseek函数功能:重定位流(数据流/文件)上的文件内部位置指针
注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件
int fseek(FILE *stream, long offset, int fromwhere);
参数:stream 文件指针,fromwhere起始基准点,offset在基准点的基础上的偏移量。
返回值:成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
实例:
#include
long filesize(FILE*stream);
int main(void)
{
FILE *stream;
stream=fopen("MYFILE.TXT","w+");
fprintf(stream,"Thisisatest");
printf("FilesizeofMYFILE.TXTis%ldbytes\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语言中,fseek(fp,sizeof(int)3,0)是什么意思
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
所以,fseek(fp,sizeof(int)*3,0)函数将文件指针指向从文件开头,向后偏移3个int单元的地方。
各位C语言的高手们,小弟我今天遇到一个fseek函数,不知道他在一下程序的含义是什么,还望各位不吝赐教啊
你的文件保存的是一个student结构体
fseek(fp,i*sizeof(struct student),0);
是从文件头每次移动一个结构体长度,然后去取下一个结构体数据
fseek 用于二进制方式打开的文件,移动文件读写指针位置.
通常文件打开后,读写位置按先后顺序.但有时你想变动读写位置,例如重新从某处起,再读一次.
fseek有3个参数,函数原型:
int fseek( FILE *stream, long offset, int origin );
第一个是文件流,第3个是指针零点位置,第2个是把指针移动到的地点.
第3个参数取值等于下列3个之1
SEEK_CUR -- 1 为当前指针位置
SEEK_END -- 2 为文件尾
SEEK_SET -- 0 为文件起始
第2个参数为偏移量,字节数,长整型.
fseek(fp,i*sizeof(struct student),0); 把文件指针从文件头移动,i个结构体长度
C语言 fseek(fp,offset,SEEK_SET)什么意思
首先得保证文件已经打开,不然会报错。
fseek是一种函数
fp :指针
offset:偏移量
seek_set:文件开头
总体意思,将指针移到文件开头,偏移量为“2”(自己设置多少,正后,负前,我设置的意思是移动到后2个字节处)
关于C语言的fseek()函数中的起始位置当前位置如何理解?
这个问题要从FILE结构体的数据项组成讲起: struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指基础位置(即是文件的起始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //文件的大小 char *_tmpfname; //临时文件名 } FILE; (注:这是vc++6.0对FILE的定义) 在用fopen()函数打开文件后系统将自动建立一个数据块存放上述信息。 其中“char *_base; ” 指向文件头在缓冲区的位置(即fseek()函数第三形参origin的SEEK_SET常量) “char *_ptr;” 减一即文件指针的当前位置(即fseek()函数第三形参origin的SEEK_CUR常量) 函数原型:int fseek( FILE *stream, long offset, int origin ) 中offset参数是个相对变量,它是相对于origin而言的。比如 int fseek( fp,100L,SEEK_SET ); 就是以文件头为基准向后移动100个字节。原理就是对内存中的FILE结构体中的元素作如下操作 FILE._ptr=FILE._base+100; int fseek( fp,100L,SEEK_CUR ); 就是以文件的当前位置为基准向后移动100个字节,相应的:FILE._ptr+=100; 其他的就不多讲了.明白了吗?