本文目录一览:
C语言 文件指针 fseek
fptr = fopen(roominfo, "rb+"); //你的文件是以读写方式打开的
当一个文件以读写方式打开,从读文件切换到写文件或者相反操作,必须刷新文件缓冲区(就是把文件的修改写入磁盘),而fseek操作会引发文件缓冲区的刷新。在你的代码里fwrite以后,下次判断是fread,所以如果不刷新文件缓冲区,fread不会读取到写入的数据,而fseek(fptr, 0,SEEK_CUR);就是在不移动文件指针的情况下,把缓冲区数据写入文件,保证fread会读取到新数据,这是常用手段
在C语言中fseek()的功能
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 问题
#include stdio.h
int main(void) {
FILE *stream;
int c,n = 0,filesize;
stream = fopen("MYFILE.TXT", "wt");
fprintf(stream, "This is a test\n");
fclose(stream);
stream = fopen("MYFILE.TXT", "r+");
while(n 4) {
filesize = 0;
while((c = fgetc(stream)) != EOF) {
printf("%c",c);
++filesize;
}
fseek(stream,-(++filesize),SEEK_CUR);
fseek(stream,0,SEEK_CUR);
++n;
}
fclose(stream);
return 0;
}
***** fseek(stream,0,SEEK_CUR); *****
这一句很重要(专家说的),用来改变文件的读状态(我也不明白这个状态),在修改数据文件时,这一句貌似废话的话所起的作用更是重要了。