C语言——文件操作函数 fseek、ftell、rewind详解

前言

        前面,我讲了讲文件操作的第二步:文件的读写操作,里面详细的介绍了各类读写函数的用法,有兴趣的小伙伴可以去看看:

C语言——文件操作(2)文件的读写操作_

        接下来,我再来讲一讲关于标题中这三个函数的用法。

目录

前言

一.fseek函数——

     1. 功能:

2.参数解析:

 3.练习1.要求输出字符c

    练习2.要求输出字符f

        A.方法1.采用SEEK_CUR 当前指针指向的位置为中心 。

        B.方法2:SEEK_CUR    文件指针的当前位置为中心。

        C.方法3:SEEK_END    文件结尾为中心。

二.ftell函数

1.功能:

三.rewind函数

1.功能:

2.代码实践:


一.fseek函数——

     1. 功能:

根据文件指针的位置和偏移量来定位文件指针。(只用来:定位!!!)

2.参数解析:

fseek第一个参数为流,第二个参数为偏移量,第三个参数为文件指针定位的位置
                        /*SEEK_SET    以文件开头为中心
                        SEEK_CUR    文件指针的当前位置为中心
                        SEEK_END    文件结尾为中心*/

下图为不使用fseek的代码:

int main() {
	FILE* pf = fopen("file.txt", "r");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}

	char ch = 0;
	ch=fgetc(pf);
	printf("%c\n", ch);

	ch = fgetc(pf);
	printf("%c\n", ch);

	ch = fgetc(pf);
	printf("%c\n", ch);

	fclose(pf);
	pf = NULL;
	return 0;
}

        代码讲解:字符输出函数——fgetc(),一次读取一个字符。使用fgetc函数时,第一次指针只能指向开头位置,每使用一次fgetc才能读取一个字符,指针会逐步向后,这种方法很死板,不能随心所欲的想指向哪个文件内容就指向哪个。

 

        上图为file.txt文件的内容 

 

        于是有了fseek函数,可以随心所欲的让文件指针指向想要的位置,以便获取想要的文件内容。

 3.练习1.要求输出字符c

int main() {
	FILE* pf = fopen("file.txt", "r");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	char ch = 0;
	//	//文件内容:abcdef


	fseek(pf, 2, SEEK_SET);
	
	ch = fgetc(pf);//ch接收文件指针指向的内容,c字符
	printf("%c\n", ch);

    fclose(pf);
    pf=NULL;
    
    return 0;
    }

代码讲解: fseek(pf, 2, SEEK_SET);

                这句代码意为:将文件指针指向文件内容开头位置,偏移量为2,偏移量0代表a,2代表0+2,即文件指针指向a之后的第2个字符c。

练习2.要求输出字符f


int main() {
	FILE* pf = fopen("file.txt", "r");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	char ch = 0;

	//方法1.
	fseek(pf, 2, SEEK_CUR);
	ch = fgetc(pf);		//ch接收文件指针指向的内容,f字符
	printf("方法1:%c\n", ch);


	//方法2:
	fseek(pf, 5, SEEK_SET);
	ch = fgetc(pf);			//ch接收文件指针指向的内容,f字符
	printf("方法2:%c\n", ch);


	//方法3:
	fseek(pf, -1, SEEK_END);
	ch = fgetc(pf);			//ch接收文件指针指向的内容,f字符
	printf("方法3:%c\n", ch);

	fclose(pf);
	pf = NULL;
	return 0;
}

代码讲解:此代码打开文件的方式为:读文件

        A.方法1.采用SEEK_CUR 当前指针指向的位置为中心 。

        fseek(pf, 2, SEEK_CUR);//这句代码意为:将文件指针指向当前指针指向的字符位置,因为在练习1中,文件指针在被读取后,指针自动跳向下一个字符位置d,当前偏移量0代表d, 偏移量设为2,2代表字符f。

        B.方法2:SEEK_CUR    文件指针的当前位置为中心。

        fseek(pf, 5, SEEK_SET);//这句代码意为:将文件指针指向文件开头位置,当前偏移量0代表a, 偏移量设为5,5代表字符f。

        C.方法3:SEEK_END    文件结尾为中心。

        fseek(pf, -1, SEEK_END);//意为:将文件指针指向文件内容末尾位置,文件内容为abcdef,末尾位置为字符f之后的位置,偏移量-1,让指针向前移动一个位置,使得指针能够指向字符f。


二.ftell函数

long int ftell ( FILE * stream );

1.功能:

         返回文件指针相对于起始位置的偏移量。

2.代码实践:

int main() {
	FILE* pf = fopen("file2.txt", "r");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	char ch = 0;
		//文件内容:abcdef

	fseek(pf, 2, SEEK_SET);
	ch = fgetc(pf);//ch接收文件指针指向的内容,c字符
	printf("%c\n", ch);
	printf("%d\n",ftell(pf));//3


	fseek(pf, -1, SEEK_END);
	ch = fgetc(pf);//ch接收文件指针指向的内容,f字符
	printf("%c\n", ch);
	printf("%d\n", ftell(pf));//



	fclose(pf);
	pf = NULL;
	return 0;
}

 

调试结果如下:

 

代码讲解:此文件打开方式为:读文件 

                结果为3的原因:因为ch接收了pf指向的位置的字符c,输出后,文件指针会自动跳到下一个字符d的位置,ftell函数就是计算指针当前位置相对于文件开头位置的偏移量距离。

                结果为6的原因:ch接收了文件指针指向的字符f后,自动向后,指向了末尾位置,ftell函数计算了末尾位置相对于文件开头位置的偏移量距离为6,偏移量距离为0表示第一个文件内容a;偏移量距离为5,表示文件内容中第6个内容字符f。


三.rewind函数

 

1.功能:

让文件指针的位置回到文件的起始位置。

2.代码实践:

int main() {
	FILE* pf = fopen("file2.txt", "r");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	char ch = 0;
	//	//文件内容:abcdef

	//练习1.要求输出字符c
	fseek(pf, 2, SEEK_SET);
	ch = fgetc(pf);//ch接收文件指针指向的内容,c字符
	printf("%c\n", ch);
	printf("%d\n", ftell(pf));//偏移量为3

	rewind(pf);//让文件指针回到文件起始位置
	printf("%d\n", ftell(pf));
	
	printf("----------------\n");

	fseek(pf, -1, SEEK_END);
	ch = fgetc(pf);//ch接收文件指针指向的内容,f字符
	printf("%c\n", ch);
	printf("%d\n", ftell(pf));//6

	rewind(pf);//让文件指针回到文件起始位置
	printf("%d\n", ftell(pf));//0
	

	fclose(pf);
	pf = NULL;
	return 0;
}

 

 

好了,这三个函数的功能与用法就讲到这里,大家觉得有用的话记得点个三连哟~,下期见!

  • 75
    点赞
  • 339
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,下面详细介绍一下 C 语言中常用的文件操作函数: 1. fopen():打开文件,返回文件指针。 ``` FILE *fp; fp = fopen("filename", "mode"); ``` 其中,filename 是要打开的文件名,mode 是文件打开的模式。常用的 mode 选项有: - "r":只读模式,打开已存在的文件。 - "w":写入模式,打开已存在的文件并截断为零长度,或创建一个新文件。 - "a":追加模式,打开已存在的文件并将文件指针指向文件末尾,或创建一个新文件。 - "rb"、"wb"、"ab":二进制模式,与上述模式相同,但是以二进制格式读写文件。 如果文件打开成功,返回一个非空的文件指针;否则返回 NULL。 2. fclose():关闭文件。 ``` fclose(fp); ``` 关闭文件后,释放文件所占用的资源。如果文件操作失败,返回 EOF。 3. fgetc():从文件中读取一个字符。 ``` char c; c = fgetc(fp); ``` 从文件中读取一个字符,并将文件指针移动到下一个字符。如果读到文件结尾或者文件读取失败,返回 EOF。 4. fgets():从文件中读取一行字符串。 ``` char str[100]; fgets(str, 100, fp); ``` 从文件中读取一行字符串,并将文件指针移动到下一行。如果读到文件结尾或者文件读取失败,返回 NULL。 5. fprintf():向文件中写入格式化的字符串。 ``` int num = 10; fprintf(fp, "The number is %d\n", num); ``` 将格式化的字符串写入到文件中。 6. fputs():向文件中写入字符串。 ``` char str[] = "Hello, world!"; fputs(str, fp); ``` 将字符串写入到文件中。 7. fwrite():从内存中写入二进制数据到文件。 ``` int nums[] = {1, 2, 3, 4, 5}; fwrite(nums, sizeof(int), 5, fp); ``` 将 nums 数组中的 5 个整数以二进制形式写入到文件中。 8. fread():从文件中读取二进制数据到内存。 ``` int nums[5]; fread(nums, sizeof(int), 5, fp); ``` 从文件中读取 5 个整数,以二进制形式存储到 nums 数组中。 9. fseek():设置文件指针的位置。 ``` fseek(fp, offset, from); ``` 将文件指针设置为从 from(SEEK_SET、SEEK_CUR、SEEK_END 之一)偏移 offset 个字节的位置。 10. ftell():获取文件指针的位置。 ``` long pos = ftell(fp); ``` 返回文件指针在文件中的当前位置。 11. rewind():将文件指针移动到文件开头。 ``` rewind(fp); ``` 将文件指针移动到文件开头。 以上是 C 语言中常用的文件操作函数,需要注意的是,在使用完文件后,必须使用 fclose() 函数关闭文件,以便释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值