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;
}

运行结果

相关推荐
SteveKenny14 分钟前
Python 梯度下降法(六):Nadam Optimize
开发语言·python
Hello.Reader1 小时前
深入浅出 Rust 的强大 match 表达式
开发语言·后端·rust
涛ing3 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
xrgs_shz3 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
厂太_STAB_丝针5 小时前
【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】
c语言·单片机·嵌入式硬件
charlie1145141916 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)
c语言·驱动开发·单片机·学习·教程·oled
来恩10036 小时前
C# 类与对象详解
开发语言·c#
*TQK*7 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
komo莫莫da7 小时前
寒假刷题Day19
java·开发语言