1.为什么使用文件?
按信息存储时间来分信息:
- 临时性信息:内存中,随断电丢失
- 永久性信息:硬盘或光盘等中的,放在文件中.
文件:载体,能将临时性信息通过文件变为永久性信息
使用文件可以使得数据持久化:当我们在运行程序结束后,程序再次运行时,上一个程序的数据就会丢失,为了将上一次程序的数据保存下来,就产生了位于硬盘上的文件。
2.什么是文件?
2-1文件的分类
- 程序文件:test.c,test.obj,test.exe等,可操作性数据文件
- 数据文件:二进制文件和文本文件等,存放一般的数据
2-2文件名
文件名3部分:文件路径+文件名主干+后缀
例如:D:\QQ\QQ文件下载\MYSQL安装和配置.pdf
2-3文件指针
每一个正在使用的文件,都在内存中 开辟了相应的文件信息区,来存放文件的相关信息(比如文件名,文件状态,文件当前的位置等等),这些信息是被保存在一个结构体变量FILE中的。
备注:以下文件操作函数的头文件都是stdio.h
3.文件的打开和关闭
3-1文件的打开
函数原型:FILE* fopen(const char* filename ,const char* mode)
参数1:file-->文件名:例如D:\桌面\test.txt,用字符串表示
备注:这里涉及绝对路径和相对路径以及转义字符的知识,\\才是\
参数2:mode--->启动的访问类型,用字符串表示
返回值:FILE* --->打开成功,则返回所打开文件的文件指针;打开失败,则返回NULL
打开方式(mode)的类型:
由于文件类型不同:"r"用于处理文本文件(.c,.txt),"rb"用于处理二进制文件(.exe.,.zip),同理"wb","ab"...
r-read 读
w-write 写
a-append 追加
t-test 文本文件,一般省略不写
b-binary 二进制文件文件
+ 读和写
3-2 文件的关闭
int fclose(FILE* stream)
- FILE* stream 打开文件的地址
- 函数返回值:int类型,如果为0,则关闭成功
int main() { //文件的打开 FILE* pf = fopen("D:\\桌面\\test.txt","r"); if (pf == NULL) { perror("fopen"); return 1; } //文件的关闭 fclose(pf); pf = NULL; return 0; }
4.文件的顺序读写
关于这里的所有输入/出流的理解:
备注:每一个流的类型都是FILE*类型
4-1字符输出函数,文件的写入-----fputc
int fputc(int c,FILE* stream)
参数1:c---->要写入的字符
参数2:stream----->指向FILE结构的指针
//写文件,mode改为w fputc('a', pf); fputc('b', pf); fputc('c', pf); fputc('d', pf); for (char ch = 'a'; ch <= 'z'; ch++) { fputc(ch,pf); }
4-2字符输入函数:文件的读出----fgetc
int fgetc(FILE* stream)
返回值:打开成功返回读出的那个字符; 打开失败返回EOF,
//读文件,mode改为r char ch1 = fgetc(pf); char ch2 = fgetc(pf); char ch3 = fgetc(pf); char ch4 = fgetc(pf); printf("%c%c%c%c", ch1, ch2, ch3, ch4); char ch = 0; while ((ch = fgetc(pf)) != EOF) { printf("%c", ch); }