文件类型:
从文件功能的角度来分类:
1.程序⽂件
按数据的组织形式分:
1.二进制文件
数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。(数字)
2.文本文件
例如:
文件的打开与关闭:
1.流
2.标准流
3.文件指针
4.文件的打开与关闭
5.文件的读写函数:
我们可以来对比一下这两组函数;
fprintf(FILE* stream,const char * format,.......);
(适用于所有输出流)
fscanf(FILE* stream,const char * format,.......);
(适用于所有输入流)
sprintf(char * str,const char * format,......);
sscanf(char * str,const char * format,......)
这些之间的区别为:
printf和sacnf为在面板上输出与获取值。
fprintf/fscanf为在printf/scanf前加上文件地址,使其输出与输入在某个文件上执行。
sprintf/sscanf为加上字符数组地址,使得输入与输出均在某个字符数组上执行(输入与输出均自动转变为字符类型)。
中间的format为"%s %d"这种。
size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream)
以二进制的形式写入文件,读取也需要以二进制形式读取。
ptr为起始地址,size为单个元素所占字节大小,count为元素个数,stream为文件地址。
返回值为成功写入的元素个数。
size_t fread(void* ptr,size_t size,size_t count,FILE* stream),以二进制形式读取文件内容并放入ptr中。
返回值为成功读取的元素个数。
int feek(FILE* stream,long int offset,int origin)
根据⽂件指针的位置和偏移量来定位⽂件指针。
offset 偏移量
origin 起始位置
origin可供参数:
1.SEEK_SET:文件起始位置。2.SEEK_CUR:文件指针当前位置。3.SEEK_END:文件末尾(最后一个元素后一个位置)。
long int ftell(FILE*stream)
返回文件指针相对于起始位置的偏移量。
void rewind(FILE* stream)使指针回到文件起始位置。
文件读取结束的判定:
打开一个流的时候,这个流上有两个标记值:
1.是否与到文件末尾。
2.读取时是否发生错误。
int feof(FILE* stream)
判断流上是否有末尾标记,没有标记则返回0,有标记则不为0.
int ferror(FILE* stream)
判断流上是否有错误标记,没有标记则返回0,有标记则不为0.
牢记:
在文件读取的过程中,不能用feof函数的返回值直接来判断文件是否结束。
feof的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束。
1.文本文件读取是否结束,判断返回值是否为EOF(fgetc)或NULL(fgets)
2.二进制文件的读取结束判断:判断返回值是否小于实际要读的个数。
例如:
fread判断返回值是否小于实际要读的个数。
文件缓冲区系统:
系统自动在内存中微程序每一个正在使用的文件开辟一块文件缓冲区。无论是从内存向磁盘输出数
据还是从磁盘向内存读取数据到内存都要经过缓冲区,分别为输出缓冲区与输入缓冲区。
流程为:程序数据区->输出缓冲区->硬盘->输入缓冲区->程序数据区
当缓冲区填满后才会将数据一起从到硬盘或磁盘上。
以下为案例: