创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
本文基于——文件的基本概念:文件的基本概念、操作
目录
- 一、ftell函数
- 二、rewind函数
- 三、fgetpos函数
- 四、fsetpos函数
- 五、fseek重定位
- 总结
先创建一个文件,打开、操作文件的基本格式:
#include <stdio.h>
int main()
{
FILE* p = fopen("E:\\TianXiFile\\letter.txt", "r+t");
if (p)
{
printf("文件打开成功!\n");
//...操作
fclose(p);
p = NULL;
}
else
{
printf("文件打开失败!\n");
}
system("pause");
return 0;
}
一、ftell函数
ftell函数用于获取当前文件指针在文件中的位置(以字节为单位)
可以用于对文件进行重新定位或判断文件大小等操作
使用:
//获得光标位置
printf("光标位置:%ld\n", ftell(p));
由此看出:文件光标默认在0处
如何移动文件光标呢?
不难想到 光标会在文件读取时随着读取的位置移动
读取数据:
//获得光标位置
printf("光标位置:%ld\n", ftell(p));
//读取数据
printf("%c\n", fgetc(p));
printf("光标位置:%ld\n", ftell(p));
printf("%c\n", fgetc(p));
printf("%c\n", fgetc(p));
printf("%c\n", fgetc(p));
printf("光标位置:%ld\n", ftell(p));
光标随着数据的读取也在移动,读取一个T光标位置移动到了1 再读取三个数据,光标位置移动到了4
二、rewind函数
rewind函数可以将文件光标重新定位到文件的开头位置,没有返回值
rewind函数会将文件光标重置到文件的开头位置
因此之前读取过的数据就要重新读取
在文件读取时,如果希望回到文件开头重新读取一遍文本内容,可以使用 rewind函数将文件光标重置到开头,再进行读取操作
三、fgetpos函数
在调用fgetpos函数时,她所需要传入的参数有一个fpos_t类型,这是什么类型呢?
定义一个fpos_t类型的变量查看一下: 是一个对long long重命名的类型 (重命名typedef知识点:【c语言】typedef详解)
fpos_t 是一种文件位置类型,可以存储与相应操作系统兼容的任意大小值
使用fgetpos函数获取光标的位置:
四、fsetpos函数
fsetpos函数用于将文件光标设置为文件流中某个位置
与fgetpos函数类似,fsetpos函数使用了一个fpos_t类型的参数来表示在哪个位置设置文件光标。
比如:我要设置文件光标为5
定义一个同类型数据(代表光标位置): const fpos_t wz = 5;
//设置光标位置
const fpos_t wz = 5;
fsetpos(p, &wz);
printf("%c\n", fgetc(p));
五、fseek重定位
如果我们想对文件中的内容进行修改,直接fputc不能成功修改,就需要进行重定位操作
文件内容没有被修改成功:
//修改文件内容
//重定位:
fseek(p, 0, SEEK_CUR);
fputc('7', p);
重定位到当前位置成功修改:
使用偏移:
定位到结束位置,偏移-2:向左偏移两位,修改 i
当使用 SEEK_SET 进行偏移时,将起始位置从文件开头算起
当使用 SEEK_CUR 进行偏移时,则是相对于当前位置的偏移
而使用 SEEK_END 进行偏移时,则会以文件末尾为起点
总结
使用下列文件操作函数,可以在程序中对文件进行读写操作
-
ftell() 函数用于获取当前文件光标的位置
-
rewind() 函数用于将文件指针重置到文件开头
-
fgetpos() 和 fsetpos() 函数用于获取和设置文件当前指针位置,使用了fpos_t类型
-
fseek() 函数可将文件指针从当前位置向前或向后移动一定数量的字节,进行重定位
文件更多知识:
【c语言】文件的基本概念、操作
【c语言】文本文件的读写操作
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |