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

news/2024/10/23 6:03:06/

目录

文件的随机读写

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.先设置光标位置

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

2.在光标位置显示字符

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,保存

代码示例

#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;
}
	fseek(p, 2, SEEK_CUR);

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

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

	fseek(p, 3, SEEK_SET);

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

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

	fseek(p, -3, SEEK_END);

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

如果用图来说明的话:

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

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

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

	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(文件指针);

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

代码示例

#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(文件指针);

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

代码示例

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

运行结果


http://www.ppmy.cn/news/1541248.html

相关文章

itext自定义pdf

pom坐标 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>字体文件可以…

go 包相关知识

在Go语言中&#xff0c;包的引用和搜索路径是由环境变量GOPATH和GO111MODULE共同决定的。 GOPATH环境变量&#xff1a;这个变量定义了默认的工作目录&#xff0c;Go命令行工具将会在这个目录下查找包文件。这个目录通常包含三个子目录&#xff1a;src、bin和pkg。 src目录包含…

解决Eclipse中’Run As’菜单缺少’Run on Server’选项的问题

解决Eclipse中’Run As’菜单缺少’Run on Server’选项的问题 问题描述&#xff1a; 当您在Eclipse中导入一个Web项目后&#xff0c;可能会发现在’Run As’菜单中没有’Run on Server’选项。这可能会让您无法方便地在本地服务器上运行和调试Web应用程序。 可能原因&#…

Qml-CheckBox的使用

Qml-CheckBox的使用 CheckBox属性 CheckBox的继承关系&#xff1a; CheckBox – AbstractButton – Control – Item; CheckBox的属性主要继承于AbstractButton。属性checkState&#xff1a;勾选状态&#xff0c;值为&#xff1a;Qt.Unchecked、Qt.Checked、Qt.PartiallyChec…

iOS弹出系统相册选择弹窗

直接上代码 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {UIImagePickerController *imagePickerController [[UIImagePickerController alloc] init];imagePickerController.delegate self; //设置代理imagePicke…

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

Electron+Vue实现两种方式的截屏功能

本次介绍的截屏功能一共有两种分别是在electron环境中与非electron环境中 非electron环境 这个环境下会有一些限制&#xff1a; 1.只能截浏览器中的画面 2.如果里面有iframe或者base64的图片会加载不出来&#xff08;这个会有解决办法&#xff09; yarn add -D js-web-scree…

UE5遇到问题-UE5可正常打包出来但是运行不了

遇到问题&#xff1a; UE5可正常打包出来但是运行不了 解决办法&#xff1a; 首先先在本地运行跑一下工程&#xff1b; 发现是没有关闭插件的问题&#xff0c;点开插件关闭掉相应的插件重新打包就可以了。 参考视频&#xff1a;(新手向)虚幻5打包 打包后双击exe没反应怎么办…