你好,我是史丰源
欢迎你的来访,希望我的博客能给你带来一些帮助。
我的Gitee: 代码仓库 ☀️
我的联系方式:
QQ:1756786195
邮箱:Marksky126@outlook.com🌐
一、为什么使用文件
我们思考一个小问题:如果登录某一个系统,每次开机都要输很多指令,那是不是会很麻烦呢?
但是如果有一个系统帮助我们保存开机所要输入的指令,我们会方便很多。
所以我们今天来介绍:文件操作。
二、什么是文件
磁盘上的文件就是文件。
在C语言中,我们有两种文件:程序文件、数据文件。
2.1 程序文件
程序文件:源程序文件(.c),目标文件(.obj),可执行文件(.exe).
2.2 数据文件
程序运行时读写的数据,在本节中,我们重点讲解数据文件的知识。
2.3 文件名
文件名是一个文件的标识,比如我们人人都有名字。
一般我们在找文件时,也会附上文件的路径
在C语言中,我们这样定义:
c:\\code\\test.txt;
注意:我们讲过转义字符\ \ 才是一个’ \ ’
三、文件的打开和关闭
3.1 文件指针
文件指针:又称文件类型指针。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件名、文件状态、文件当前的位置等),这些信息都保存在一个结构体变量中。
此结构体变量名为FILE.
此图为VS2019 FILE的定义。
但是不同的编译器对于FILE有不同的定义,并且平时我们也不深究FILE内部到底是什么。
所以大家了解即可,不必关心细节。
我们看到FILE结构体内有一个void*,一般我们都是通过FILE的指针来维护FILE结构的变量,所以我们推出了文件指针这个概念。
创建一个文件指针
FILE *pc;
pc可以指向FILE类型数据,可以让pc指向文件的某个信息区(比如名称、路径等),通过文件信息区的信息就可以访问该文件。
3.2 文件的打开和关闭
- fopen(文件的打开)
FILE *pc = fopen("test.txt","r");//只读方式打开
下表是文件的打开方式:
2. fclose(文件的关闭)
一个文件的标准关闭程序:
fclose(pc);
pc=NULL;
四、文件的顺序读写
4.1 对比一组函数:
scanf/fscanf/sscanf:
fscanf:从文件中读取
fscanf遇到空格和换行时结束,注意空格时也结束。
FILE *fc;
char a[10];
int b;
double c;
fscanf(fc,"%s%d%lf",a,&b,&c);
sscanf:从指定字符串输入。
char str[512] = {0};
sscanf("123456 ", "%s", str);
printf("str=%s\n", str);
一篇大佬写的博文:scanf/fscanf/sscanf详解
printf/fprintf/sprintf
fprintf:
fprintf(fp, “%d”, buffer); 是将格式化的数据写入文件
fprintf进行写入时,一位占一个字节
大家可以看到fprintf与sprintf的形参分别与fscanf和sscanf相对应。
所以他们可以类比记忆。
sprintf:
将格式化的数据写入字符串.
sprintf(s, "%d", 123); //产生“123″
五、文件的随机读写
5.1 fseek(根据文件指针的位置和偏移量来定位文件指针)
int main ()
{
FILE *fp;
fp = fopen("file.txt","r");
int ch = fgetc(fp);
fseek( fp, 2, SEEK_CUR );//现在位置读取
ch = fgetc(fp);
printf("%c\n",ch);
fclose(fp);
fp=NULL;
return(0);
}
5.2 ftell(告诉我们文件指针相对于起始位置的偏移量)
#include<stdio.h>
int main()
{
FILE* fp;
fp = fopen("file.txt", "r");
int ch = fgetc(fp);
fseek(fp, 0, SEEK_END);
int size=ftell(fp);
printf("%d\n", size);
fclose(fp);
fp = NULL;
return(0);
}
5.3 rewind(让指针返回文件的起始位置)
int main()
{
FILE* fp;
fp = fopen("file.txt", "r");
int ch = fgetc(fp);
fseek(fp, 0, SEEK_END);
rewind(fp);
int size = ftell(fp);
printf("%d\n", size);
fclose(fp);
fp = NULL;
return(0);
}
写在最后,坚持空杯心态,坚持做有意义的事。