88.【C语言】文件操作(5)

目录

文件的随机读写

1.fseek函数

代码示例

运行结果

2.ftell函数

代码示例

运行结果

3.rewind函数

代码示例

运行结果


承接79.【C语言】文件操作(4)文章

文件的随机读写

1.fseek函数

声明:int fseek ( FILE * stream, long int offset, int origin );

格式:fseek(文件指针,偏移量,起始位置);

作用:根据文件指针的位置和偏移量来定位文件指针(文件内容的光标)

类比Intel 8086汇编语言的 int10h中断便可理解fseek函数为什么要这样做

1.先设置光标位置

cpp 复制代码
mov ah,2  ;int 10h的2号子功能:置光标
mov bh,0  ;第0页
mov dh,5  ;dh中放行号
mov dl,12 ;dl中放列号
int 10h

2.在光标位置显示字符

cpp 复制代码
mov ah,9  ;int 10h的第9号子功能:在光标位置显示字符
mov al,'a';字符
mov bl,7  ;颜色属性
mov bh,0  ;第0页
mov cx,3  ;字符重复的个数
int 10h

起始位置的表格

|----------|-------------|
| 常量 | 位置 |
| SEEK_SET | 文件开始的位置 |
| SEEK_CUR | 文件指针当前指向的位置 |
| SEEK_END | 文件的末尾 |

提前建好data.txt,输入1234567,保存

代码示例

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
	FILE* p = fopen("data.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 1;
	}

	int ch = fgetc(p);
	printf("%c", ch);

	fseek(p, 2, SEEK_CUR);

	ch = fgetc(p);
	printf("%c", ch);

	fclose(p);
	p = NULL;

    return 0;
}
cpp 复制代码
	fseek(p, 2, SEEK_CUR);

含义是:从当前指针的位置开始算,偏移量为2

改成下方的代码,运行结果是一样的

cpp 复制代码
	fseek(p, 3, SEEK_SET);

含义是:从文件起始的位置开始算,偏移量为3

改成下方的代码,运行结果还是一样的

cpp 复制代码
	fseek(p, -3, SEEK_END);

含义是:从文件末尾的位置开始算,偏移量为-3

如果用图来说明的话:

将data.txt用HxD.exe(点我跳转至官网下载)打开

图里的Offset(h)是以十六进制显示的偏移量

如果将SEE_SET,SEEK_END标在上面的话

cpp 复制代码
	int ch = fgetc(p);
	printf("%c\n", ch);
	fseek(p, 0, SEEK_SET);
	ch = fgetc(p);
	printf("%c\n", ch);

两次打印的结果是一样的

运行结果

2.ftell函数

声明:long int ftell ( FILE * stream );

格式:ftell(文件指针);

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

代码示例

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
	FILE* p = fopen("data.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 1;
	}
	long int ret = ftell(p);
	printf("%ld\n", ret);
	int ch = fgetc(p);
    ret = ftell(p);
	printf("%ld\n", ret);

	fclose(p);
	p = NULL;

	return 0;
}

运行结果

3.rewind函数

声明:void rewind ( FILE * stream );

格式:rewind(文件指针);

作用:将文件指针恢复至初始位置

代码示例

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
	FILE* p = fopen("data.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 1;
	}

	int ch = fgetc(p);
	printf("%c\n", ch);
	ch = fgetc(p);
	printf("%c\n", ch);
	ch = fgetc(p);
	printf("%c\n", ch);
	rewind(p);
	ch = fgetc(p);
	printf("%c\n", ch);
	fclose(p);
	p = NULL;

	return 0;
}

运行结果

相关推荐
_w_z_j_4 分钟前
Linux----线程互斥与同步
linux·运维·开发语言
云栖梦泽5 分钟前
易语言网络编程基础:构建网络版应用
开发语言
布茹 ei ai33 分钟前
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)
开发语言·c++·qt·开源·开源项目·天气预报
Wpa.wk34 分钟前
自动化测试 - 文件上传 和 弹窗处理
开发语言·javascript·自动化测试·经验分享·爬虫·python·selenium
LinHenrY122736 分钟前
初识C语言(编译和链接)
c语言·开发语言·蓝桥杯
_OP_CHEN36 分钟前
【Python基础】(二)从 0 到 1 入门 Python 语法基础:从表达式到运算符的全面指南
开发语言·python
l1t37 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
我命由我123451 小时前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
csbysj20201 小时前
Scala 类和对象
开发语言
拾忆,想起1 小时前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现