-
2017-08-21 17:33:34
头文件:#include <stdio.h>
函数原型:int fseek(FILE *stream, long offset, int fromwhere);
参数:
stream:指向打开的文件指针。
offset:以基准点为起始点的偏移量。
fromwhere:基准点。
返回值:
成功,返回0;失败返回-1。
其中基准点包括这三个枚举:
SEEK_SET:文件头。
SEEK_CUR:当前位置。
SEEK_END:文件件尾。
作用:重定位流(数据流/文件)的内部位置指针。
描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败,则不改变stream指向的位置。
程序实例:
#include <stdio.h> 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; }
其他用法:
fseek(fp, 100L, 0);把stream指针移动到离文件开头100字节处;
fseek(fp, 100L, 1);把stream指针移动到离文件当前位置字节处;
fseek(fp, -100L, 2);把stream指针移动到离文件尾100字节处;
上面函数的0, 1, 2分别为SEEK_SET,SEEK_CUR,SEEK_END。
更多相关内容 -
C语言fseek、fread、fwrite读写二进制文件
2016-03-17 14:07:45C语言读写二进制文件的使用 -
C语言fseek函数
2021-01-17 11:30:44C语言fseek函数教程在C 语言给我们提供了 fseekC语言fseek函数详解语法int fseek(FILE *fp, long offset, int origin);参数参数描述fp文件指针。offset偏移量,也就是要移动的字节数。offset 为正时,向后移动;...C语言fseek函数教程
在
C 语言给我们提供了 fseek
C语言fseek函数详解
语法
int fseek(FILE *fp, long offset, int origin);
参数
参数
描述
fp
文件指针。
offset
偏移量,也就是要移动的字节数。offset 为正时,向后移动;offset 为负时,向前移动。
origin
origin 为起始位置,也就是从何处开始计算偏移量。
origin参数
起始点
常量名
常量值
文件开头
SEEK_SET
0
当前位置
SEEK_CUR
1
文件末尾
SEEK_END
2
头文件
fseek 函数在 stdio.h 的头文件里面。
案例
使用fseek文件指针移动到开始
使用 fseek 函数,实现将文件指针移动到文件的开始
#include
#include
int main(){
printf("嗨客网(www.haicoder.net)\n\n");
FILE *fp = NULL;
char str[100];
if ( (fp = fopen("c:\\1.txt", "wt+")) == NULL )
{
puts("Open file failed\n");
return;
}
fputs("Hello HaiCoder\n", fp);
fputs("Hello C\n", fp);
puts("Write file success\n");
while (fgets(str, 100, fp) != NULL)
{
printf("Read line = %s", str);
}
fclose(fp);
return 0;
}
程序运行后,控制台输出如下:
我们首先,使用了
此时,我们看到,我们并没有读取到任何文件内容,这是因为,我们写入文件内容之后,文件指针已经移动到了文件末尾,因此,无法正确读取文件内容,现在,我们修改程序如下:
#include
#include
int main(){
printf("嗨客网(www.haicoder.net)\n\n");
FILE *fp = NULL;
char str[100];
if ( (fp = fopen("c:\\1.txt", "wt+")) == NULL )
{
puts("Open file failed\n");
return;
}
fputs("Hello HaiCoder\n", fp);
fputs("Hello C\n", fp);
puts("Write file success\n");
fseek(fp, 0, SEEK_SET);
while (fgets(str, 100, fp) != NULL)
{
printf("Read line = %s", str);
}
fclose(fp);
return 0;
}
程序运行后,控制台输出如下:
这次,我们在写入文件之后,使用了 fseek 函数,将文件指针再次移动到文件的开始,此时再次读取文件内容,我们发现,已经可以读取到文件内容了。
我们再次,使用 feek 函数,实现将文件指针移动到文件的 10 个字节开始的位置,修改代码如下:
#include
#include
int main()
{
printf("嗨客网(www.haicoder.net)\n\n");
FILE *fp = NULL;
char str[100];
if ( (fp = fopen("c:\\1.txt", "wt+")) == NULL )
{
puts("Open file failed\n");
return;
}
fputs("Hello HaiCoder\n", fp);
fputs("Hello C\n", fp);
puts("Write file success\n");
fseek(fp, 10, SEEK_SET);
while (fgets(str, 100, fp) != NULL)
{
printf("Read line = %s", str);
}
fclose(fp);
return 0;
}
程序运行后,控制台输出如下:
这次,我们在写入文件之后,使用了 fseek 函数,将文件指针移动到文件的开始 10 个字节的位置,此时再次读取文件内容,我们发现,读取的第一行文件的内容已经不全了。
C语言fseek函数总结
C 语言给我们提供了 fseek 函数,用来实现任意的移动文件指针,注意与 rewind 函数的区别,rewind 函数只能将文件指针移动到文件的开始。
-
C语言fseek()、ftell()、rewind()函数
2021-08-28 17:44:12例如打开文件写入内容后,这时文件指针在末尾后一个字节,若需直接读出内容,可以选择关闭文件重新打开,这样文件指针重新指向文件首部,但这样来回打开关闭文件容易出错,可以使用fseek()函数对文件位置指针进行重...这三个函数的功能是对文件流的位置指针进行定位,方便文件的读写操作;例如打开文件写入内容后,这时文件指针在末尾后一个字节,若需直接读出内容,可以选择关闭文件重新打开,这样文件指针重新指向文件首部,但这样来回打开关闭文件容易出错,可以使用fseek()函数对文件位置指针进行重定位,重新将指针定位到文件首部。
注意!!!
这里所说的“指针”并不是文件流指针,而是文件内部的位置指针;随着对文件的读写操作,文件的位置指针向后移动(指向当前读写字节),文件关闭后指针自动指向文件首部。文件流指针指向整个文件,不重新赋值指向不会改变。fseek()函数
函数原型
#include <stdio.h> int fseek(FILE *stream, long offset, int whence);
rewind()函数、fseek()函数以及ftell()函数都在标准IO库中,fseek()中stream表示文件流指针,whence表示想要定位的位置,offset表示偏移量,根据whence的位置需要移动的字节数,可正可负,正数表示正向偏移,负数表示反向偏移。fseek()可以设定访问文件的读写位置,可以以任意顺序访问文件的位置,从而实现文件的随机访问。
whence的常量描述:
常量 数值 描述 SEEK_SET 0 文件首部 SEEK_CUR 1 文件指针当前位置 SEEK_END 2 文件尾部 - SEEK_SET表示文件指针从文件首部偏移offset个字节(offset不能是负数),只能正向偏移
- SEEK_CUR表示文件指针从当前位置偏移offset个字节
- SEET_END表示文件指针从文件末尾偏移offset个字节(offset不能为正数),只能负向偏移
fseek(fp,0L,SEEK_SET); //定位到文件首部 fseek(fp,100,SEEK_SET); //定位到文件首部向后偏移100字节 fseek(fp,-100,SEEK_CUR); //定位到当前位置向前100字节 fseek(fp,0L,SEEK_END); //定位到文件尾部 fseek(fp,-50,SEEK_END); //定位到文件尾部向前50字节
fseek 函数只返回执行的结果是否成功,成功返回0,失败返回-1,并不返回文件的读写位置。
rewind()函数
函数原型
#include <stdio.h> void rewind(FILE *stream);
rewind()函数中steam表示一个文件流指针,是将steam所指向文件的位置指针重新定位到文件首部,这个函数只能实现这一个功能;根据函数的原型,可以发现该函数的返回值为空,则无法判断其是否成功,也可以理解为该函数不会失败;因此在使用中最好使用fseek()函数进行替代。
rewind(fp); 等价于 fseek(fp,0L,SEEK_SET);
ftell()函数
函数原型
#include<stdio.h> long ftell(FILE *stream);
ftell()函数的参数与rewind()函数相同,是一个文件流指针,ftell()函数获取当前位置指针所在的字节数,返回值是长整型。在实际读写文件中,文件位置将会频繁的随意移动,到最后不知道位置指针指向哪里,就可以利用ftell()函数得到当前位置指针的位置,下面写一段代码,利用fseek()和ftell()获取文件的大小。
#include<stdio.h> #include<stdlib.h> int main() { FILE *fp=NULL; fp=fopen("文件位置及名称“,"r"); //以只读形式打开文件 if(fp==NULL) { perror("fopen()"); exit(1); } fseek(fp,0L,SEEK_END); //将文件位置指针指向文件末尾 printf("File size is %ld.\n",ftell(fp); //长整型 exit(0); }
-
关于C语言中fseek函数的使用
2021-02-07 11:19:35关于C语言中关于C语言中fseek函数的使用
fseek函数的基本使用
fseek函数的头文件是stdio.h
函数原型: fseek(FILE*, long, space)
第一个参数一个文件指针,很显然是传递打开的文件的
第二个参数是偏移量,是一个long型形参
第三个参数是相对位置,有以下三种情况:
1.SEEK_SET 文件开始处
2.SEEK_CUR 当前位置
3.SEEK_END 文件末尾
这三个参数是宏定义,使用时直接填写就行接下来将用一个小例子来说明使用
// 这是想要的函数 FILE* fp; int test_data = 100; fp = fopen("test.bin", "r+"); // 打开文件 if(fp == NULL) exit(0); fseek(fp, 10, SEEK_SET); //将指针移到开始后的10字节位置 fwrite(&test_data, sizeof(test_data), 1, fp);//写数据 fclose(fp);
fseek的注意事项
接下来的这个
// 这是想要的函数 FILE* fp; int test_data = 100; fp = fopen("test.bin", "a+"); if(fp == NULL) exit(0); fseek(fp, 10, SEEK_SET); // 无效 fwrite(&test_data, sizeof(test_data), 1, fp); fclose(fp);
如果像上述这样以追加的格式打开文件,那么指针的移动是无效的,因为追加默认指向文件的末尾。
如果想要修改文件,则需要用r+的格式打开。
不能用w格式打开文件!因为那么做会清空文件的数据。 -
C语言fseek()函数(whence)重新定位文件指针位置
2022-02-23 15:43:41C 库函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence(从何处; 从哪里; ) 位置查找的字节数。 声明 下面是 fseek() ... -
c语言fseek问题 ?c语言什么意思
2021-03-07 18:28:43在c语言中,fseek(fp,sizeof(int)*3,0)是什么意思?int fseek(file*stream,long offset,int from where)函数设置文件指针流的位置。如果执行成功,流将指向基于fromwhere的偏移量(指针偏移量)字节位置,函数将返回... -
fseek函数c语言_使用示例的C语言中的fseek()函数
2020-07-06 18:36:08fseek函数c语言 C中的fseek()函数 (fseek() function in C) Prototype: 原型: int feek(FILE *stream, long int offset, int origin); Parameters: 参数: FILE *stream, long int offset, int origin ... -
C语言fseek()函数:移动文件流的读写位置
2016-09-08 14:33:11定义函数:int fseek(FILE * stream, long offset, int whence); fseek()用来移动文件流的读写位置. 1、参数stream 为已打开的文件指针, 2、参数offset 为根据参数whence 来移动读写位置的位移数。 3、参数 ... -
C语言 文件读写 fseek 函数 - C语言零基础入门教程
2021-10-11 15:59:41一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fseek 函数用来移动文件流的读写位置;就好比播放器,可以直接拖拽到... -
C语言--fseek()
2019-12-30 14:47:44int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。 如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如... -
C语言学习笔记---fseek()函数和ftell()函数
2021-11-01 16:33:40fseek()函数 fseek()函数简单的理解,功能就是用来设置打开文件中光标的位置。比如默认打开一个文件后,光标在文件的最开始位置,但是好多时候操作文件的时候,不一定都是从最开始位置操作的。有时候需要在文件... -
C语言fseek()函数:重定位流上的文件指针
2021-05-19 09:07:50函数名: fseek头文件:函数原型: int fseek(FILE *stream, long offset, int fromwhere);功 能:重定位流上的文件指针 在流上重新定位文件结构的位置。fseek设置与流stream相联系的文件指针到新的位置,新位置与from... -
C语言大文件操作疑问(fseek)
2021-01-17 11:30:41如果是你是32操作系统,c语言操作文件的大小是 2^31 ,2G如果是你是64操作系统,c语言操作文件的大小是.2^63 ,8589934592 G。你说的问题肯定,出在32位操作系统上。一是:操作系统能不能允许创建2G以上的文件了,... -
C语言fseek、ftell和rewind函数详解
2021-06-24 15:51:42对于文件的定位,可以通过 rewind、fseek 与 ftell 函数来完成。 其中,rewind 函数用于将文件内部的位置指针重新指向一个流(数据流或者文件)的起始位置。这里需要注意的是,这里的“指针”表示的不是文件指针,... -
C语言之fseek()用法(二十二)
2021-07-30 13:28:55#include <stdio.h> /* SEEK_SET 文件的开头 SEEK_CUR 文件指针的当前位置 SEEK_END 文件的末尾 ... fseek( fp, 7, SEEK_SET );//从开头位置向尾部跳过7个字节 fputs(" C Programming Langa. -
C语言rewind和fseek函数的用法详解(随机读写文件)
2021-05-22 14:01:35前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分...文件定位函数rewind和fseek移动文件内部位置指针的函数主要有两个,即 rewind() 和 f... -
c语言 fseek() 函数的记录
2020-07-01 09:46:351.fseek() 函数的声明。 int fseek(FILE *stream, long int offset, int whence) 2.描述 函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件位置为给定的偏移 offset,参数 offset ... -
C语言fseek函数了解
2012-12-13 15:29:47fseek()函数 重定位流(数据流/文件)上的文件内部位置指针 注意: 不是定位文件指针,文件指针指向文件/流,文件指针如果不重新赋值将不会改变指向别的文件。 位置指针指向文件内部的字节位置,随着文件的读取会... -
C语言fseek()函数和ftell()函数
2020-02-05 20:47:28自用fseek()函数和ftell()函数 -
C语言 fseek、_fseeki64返回成功,文件指针被指向错误位置 解决思路
2020-04-21 20:00:53优化代码时: 我将每次写入时,打开文件,写结束后,关闭文件 改为 沙盒启动时,打开文件,拿着句柄 每次检查句柄后,写入 沙盒退出时,关闭文件 调试 发现,沙盒不能正确恢复 检查 发现了一个新问题,调用fseek ... -
c语言fseek,fopen,fwrite,fread
2019-07-12 14:28:48用c语言fseek(),fopen(),fwrite(),fread()函数,将txt文件中的后26位字母的小写改为大写。 #include <stdio.h> int main(void) { char buf[26]; FILE *fp = fopen("haha.txt","r+"); if(fp == NULL) { ... -
C语言如何获取文件大小?fseek() + ftell()
2022-02-23 16:55:26} fseek(fp, 0, SEEK_END); //定位到文件尾,偏移量为0 len = ftell(fp); //返回当前定位的文件位置(也就是文件总长度) fclose(fp); printf("file.txt 的总大小 = %d 字节\n", len); return(0); } VS编译...