目录
文件可以将数据持久化保存。
文件
程序文件包含源程序文件,目标文件。
数据文件,以输出和输入为目的。
数据以二进制存储,如果直接输出到外部文件中,就是数据文件。
字符是以ASCII存储,数值可以是二进制或ASCII。
文件名是文件的唯一标识如D:\软件\C\fish_xue\fish_xue
在D盘软件文件夹中的C文件夹中的fish_xue文件夹。
文件的打开和关闭
流
文件输出和输入需要通过数据流而文件的打开关闭是对流的截取操作。
标准流
stdin——标准输入流
stdout——标准输出流
stderr——标准错误流
文件指针
文件类型的指针(FILE*P)可以使用P来间接找到文件。
文件的打开和关闭
打开函数fopen
FILE*P= fopen (const char* name,const char*mode)
name是指向的文件命
mode是文件的打开模式
r 只读(如果没有目标文件会返回空指针) w 只写(没有目标文件和创建文件)
a 追加(没有目标文件和创建文件)
rb只读(二进制如果没有目标文件会返回空指针)
wb只写(二进制没有目标文件和创建文件)
ab追加(二进制没有目标文件和创建文件)
r+ 读和写打开文件 (如果没有目标文件会返回空指针)
w+读写创建文件(没有目标文件和创建文件)
rb+读和写打开文件(二进制如果没有目标文件会返回空指针)
wb+读写创建文件(二进制没有目标文件和创建文件)
ab+读写追加(二进制没有目标文件和创建文件)
规律当mode包含 r 时没有目标文件会报错。其他的会创建一个目标文件。


使用w只写创建了一个fish.txt文件
关闭函数fclose
int fclose ( FILE * stream );
关闭打开的文件指针名。
文件的读写
fputc函数
int fputc ( int character, FILE * stream );
只能写一个字符,写的光标是在文件最开始位置,每一次调用光标会后移。


fgetc函数
int fgetc ( FILE * stream );
读取一个字符,成功读取返回ASCII;
如果读到文件末尾或读取失败返回-1(EOF);
只能读一个字符,读的光标是在文件最开始位置,每一次调用光标会后移。


fputs函数
int fputs ( const char * str, FILE * stream );
int fputs(字符串直至/0,FILE*p)
写入一个字符串。会覆盖文件的内容

fgets函数
char * fgets ( char * str, int num, FILE * stream );
char *gets(char* str,int num,FILE*p)读取一行的字符
str放置读取的字符,num最大读取数量(包含\n),p文件。如果num比一行的字符少,那么不打印\n,下一次读取在同一行。
每进行一次光标下一行。
如果读取错误返回NULL。

fprintf函数
格式化输出函数
int fprintf ( FILE * stream, const char * format, ... );
使用和printf函数基本相同,在输出前加文件指针。写入目标文件中
printf是把数据以格式化的形式打印在标准输出流上
fprintf是把数据以格式化的形式打印在指定的输出流上

sprintf函数
int sprintf ( char * str, const char * format, ... );
将格式化的数据转换为字符串。

fscanf函数
格式化的输入函数
int fscanf ( FILE * stream, const char * format, ... );
和scanf函数基本相同,作用是读取文件的数据写入。
scanf是从标准输入流读取格式化数据
fscanf是从指定的输入流读取格式化数据

sscanf函数
int sscanf ( const char * s, const char * format, ...);
在字符串中读取格式数据。

fwrite函数
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
写的类型 占多少字节 有多少元素 文件指针
以二进制输出,用于写入文件。

因为是二进制存在txt文件中会乱码。
fread函数
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
以二进制输入,只能针对文件
用于从文件中读取文件

fseek函数
int fseek ( FILE * stream, long int offset, int origin );
文件指针 偏移量 起始位置
用于调整光标位置。
origin的不同填写
| SEEK_SET | 文件的开始 |
| SEEK_CUR | 文件指针的当前位置 |
| SEEK_END | 文件末尾 |



文件末尾包含\n所以从文件末尾查找时要从-1开始
ftell函数
long int ftell ( FILE * stream );
返回文件指针现在位置与起始位置的偏移量。

rewind函数
void rewind ( FILE * stream );
让文件指针回到起始位置。

feof函数和ferror函数
不能用feof的返回值来判断文件是否结束
feof是判断文件结束是不是因为到文件末尾结束。
ferror读取是发生错误
注意事项
文件打开方式要对应,r对应的读取,w对应的写入
文件缓冲区
在内存和硬盘中有缓冲区。
文件先存放在缓冲区,再输入的硬盘。
如果没有缓冲区会出现读写错误。
大小看编译器



被折叠的 条评论
为什么被折叠?



