1.使用文件的意义
用于处理大型数据,长久性的存储数据、
2.文件的概念
文件:电脑硬盘上的存储数据的文件
分类
按照内容:程序文件、数据文件
按照形式:文本文件、二进制文件
文件名:文件的唯一标识,一般按照路径+文件名主体+后缀组成
// · 表示当前路径
//··表示上一级路径
3.流
流:是一种便于程序员对于各种输入输出设备的不同交互。
流的具体定义:Pointer to a FILE object that identifies an input stream.
标准流:属于流的一种,stdin(标准输入)、stdout(标准输出)、stderr(标准错误)
FILE:是C语言内置结构体,用来在程序运行时候在内存开辟一块空间存放文件结构体变量,对里面各种参数进行记录以便来维护文件。
FILE*:便于维护文件结构体的指针。
4.文件的打开与关闭
文件打开函数:fopen
LINK
文件关闭函数:fclose
LINK
5.文件的读写
文件可以用程序进行读写操作,为了便于文件读写,C语言为我们提供了一系列库函数:
eg:fgetc与fputc
LINK
LINK
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//创建test文件
FILE* pf = fopen("test.txt", "w");
fclose(pf);
pf = NULL;
//将10086写到test文件中
FILE* pwrite = fopen("test.txt", "w");
fputc('1', pwrite);
fputc('0', pwrite);
fputc('0', pwrite);
fputc('8', pwrite);
fputc('6', pwrite);
fclose(pwrite);
pwrite = NULL;
//将test文件内容读到屏幕上
FILE* pread = fopen("test.txt", "r");
fprintf(stdout,"%c", fgetc(pread));
fprintf(stdout,"%c", fgetc(pread));
fprintf(stdout,"%c", fgetc(pread));
fprintf(stdout,"%c", fgetc(pread));
fprintf(stdout,"%c", fgetc(pread));
fclose(pread);
pread = NULL;
return 0;
}
为了便于文件读写,C还提供了可以在文件中移动光标位置的库函数:fseek LINK
因为这个函数涉及到一些偏移量的问题,C也提供了一个专门计算偏移量的库函数:
ftell LINK
6.文件读写结束的判定
feof函数LINK
ferror函数LINK
rewindLINK
7.文件缓冲区
#include <stdio.h>
#include <windows.h>
//VS2019 WIN11环境测试
int main()
{
FILE*pf = fopen("test.txt", "w");
fputs("abcdef", pf);//先将代码放在输出缓冲区
printf("睡眠10秒-已经写数据了,打开test.txt⽂件,发现⽂件没有内容\n");
Sleep(10000);
printf("刷新缓冲区\n");
fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到⽂件(磁盘)
//注:fflush 在⾼版本的VS上不能使⽤了
printf("再睡眠10秒-此时,再次打开test.txt⽂件,⽂件有内容了\n");
Sleep(10000);
fclose(pf);
//注:fclose在关闭⽂件的时候,也会刷新缓冲区
pf = NULL;
return 0;
EOF