最近事情真的好多呀,但我喜欢这种充实又忙碌的感觉,这给我一种踏踏实实的安全感,这段时间我学习了关于文件操作的各种知识,现在总结一下,分享给大家!
1.使用文件可以让我们将数据存放到电脑的硬盘里,从而让数据能够保存下来
文件的分类:
1.程序文件:源程序文件,目标文件,可执行程序
2.数据文件:
文件的名称:
一个文件必须要有一个唯一的标识,这个标识就是文件名
文件名包含三部分:文件路径,文件名主干,文件后缀
比如:F:\git\test.txt
其中 F:\git 就是文件路径,test就是文件名主干,.txt就是文件的后缀
补充:1.文件名中可以不包含文件后缀
2.文件中有一些禁止使用的符号,比如:\/ : * ? " < > |
文件的打开与关闭
每个被使用的文件都在内存里开辟了一个相应的文件信息区,用来存放文件的相关信息(文件的名字,文字状态,及文件当前的位置)这些信息存放在一个结构体变量里,该结构体类型是又系统声明的,取名FILE
一般是通过一个FILE*类型的指针来FILE结构的变量
FILE* pf ;
fopen 来打开文件,fclose来关闭文件
查阅文档,我们不难发现,fopen函数的第一个参数是一个字符串,这个字符串就是文件的文件名,而第二个参数也是一个字符串类型的,这里是指文件打开的方式,我将在接下来的内容中不断地介绍
文件的顺序读写
在搞明白文件顺序读写的这些函数之前,我们需要先了解一下文件和内存之间的读和写
还记得我们经常使用的scanf和printf函数吗
键盘----scanf-----内存-----printf-----屏幕
由键盘通过scanf向内存中输入,被称为读
由内存通过printf向屏幕中输出,被称为写
不难看出,读和写的主语是内存
因此,当我们把键盘和屏幕替代成文件后
有这样的关系:
文件----(读)----内存----(写)----文件
字符输入函数fgetc 适用于所有输入流(读)
字符输出函数fputc 适用于所有输出流(写)
当我们要往文件里写如某些数据时,是从内存----写----文件的过程,我们要用fputc函数
int main()
{
//打开文件
FILE* pf = fopen("test.txt","w");
if (pf == NULL)
{
perror("fopen::");
}
fputc('s', pf);
//关闭文件
fclose(pf);
pf = NULL;
}
这样我们就成功地将一个字符s输出到了文件里
同样的,我们可以使用fgetc来读文件里的一个字符
当你觉得一个字符一个字符的读取数据太过于低效,你也可以使用fgets,fputs来一行一行的进行数据处理,这里不做过多赘述
接下来我想重点讲解一组函数
scanf fscanf sscanf
printf fprintf sprintf
printf: 按照格式化的方式把数据写到屏幕上
fprintf:按照格式化的方式把数据写到文件里
sprintf:按照格式化的方式把数据写到字符串里
如果你从未见过下面两个函数,没有关系,仔细对比他们的参数你就会发现
他们有一部分是完全一样的
fprintf多出一个FILE*类型的变量
这说明fprintf的作用是按照格式化的方式把数据写到文件里
而sprintf多出一个char*类型的变量
这说明sprintf的作用是按照格式化的方式把数据写到字符串里
有了上面的经验,我们不难发现
scanf是从键盘读格式化的数据到内存中
fscanf是从文件中读格式化的数据到内存中
sscanf是从字符串中读格式化的数据到内存中
想必说到这里,你一定好奇printf和fprintf、scanf和fscanf的关系吧
其实,在任意一个C文件打开的时候都会默认打开三个流:
1.stdin 标准输入流
2.stdout 标准输出流
3.stderr 标准错误流
阅读文档可以知道,fprintf和fscanf都是适用于所有输出流和输入流的
其实,我们把原本放文件指针的位置放上标准输入输出流,就能实现printf和scanf同样的效果
int main()
{
int a = 100;
fprintf(stdout,"%d",a);
}
这个函数就代表将a的内容通过"%d"的格式输出(写)到屏幕上,和printf的功能是一样的
同理,fscanf在这里就是从键盘输入的内容以"%d"的格式读取,放到a里
int main()
{
int a = 0;
fscanf(stdin,"%d",&a);
printf("%d",a);
}
文件的随机读写
因为较为简单,在这里只简单介绍一下ftell函数
其中第三个参数
分别意为,文件起始的地址,现在的位置,和末尾
可以通过文件指针的位置和偏移量定位文件指针
ftell
这个函数会返回文件指针相对起始位置的偏移量
fwind
这个函数会让文件指针回到起始位置
经常被错误使用的feof函数
经常有人使用feof函数来判断文件是否关闭成功,但其实feof并不是用来判断文件是否关闭成功的
而是在文件已经关闭的情况下,判断是因为读取失败结束还是正常结束的
1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
fgetc 判断是否为 EOF .
fgets 判断返回值是否为 NULL .
2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
今天的内容就先分享到这里,文件的内容确实很多,希望对大家有所帮助,如有错误欢迎指出