- 文件类型
二进制文件 | 数据在内存中以二进制形式存储,不加转换输出到外存就是二进制文件 |
---|---|
文本文件 | 需要在存储前转换为ASCII形式存储的文件就是文本文件 |
数据文件的内容不是程序而是程序运行时候读写的数据。
- 文件存储
字符在内存中以ASCII码形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
例如一个十进制整数10000,以ASCII形式存储,占用5个字节(每个字符都占一个字节),以二进制形式存储则只占4个字节。如下图:
- 文件打开关闭
文件在使用时用fopen函数打开文件, FILE * fopen ( const char * filename, const char * mode);
使用结束后用fclose函数关闭。int fclose ( FILE * stream);
文件使用方式 | 含义 | 若文件不存在 |
---|---|---|
“r” (只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立一个新文件 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为了输入数据,打开一个二进制文本文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文本文件 | 建立一个新文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建一个新的文件 | 建立一个新文件 |
“a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新文件 |
“rb+(读写)” | 为了读和写,打开一个二进制文件 | 出错 |
“wb+”(读写) | 为了读和写,建一个新的二进制文件 | 建立一个新文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读写 | 建立一个新文件 |
- 文件读写
功能 | 函数名 | 适用于 |
---|---|---|
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输入流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输入流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输入流 |
二进制输入 | fread | 所有输入流 |
二进制输出 | fwrite | 所有输入流 |
- 函数比较
scanf/fscanf/sscanf
printf/fprintf/sprintf
- 文件的随机读写
fseek:根据文件指针的位置和偏移量来定位文件指针。
int fseek ( FILE * stream,long int offset,int origin);
ftell:返回文件指针相对于起始位置的偏移量
long int ( FILE * stream);
rewind :让文件指针额位置回到指针的起始位置
void rewind ( FILE * stream);
- feof函数
不能用feof函数的返回值直接来判断文件是否结束;feof用于当文件结束时,判断是读取失败结束还是遇到文件尾结束;
1、文本文件读取是否结束,判断返回值是否为EOF (fgetc) ,或者NULL (fgets)例如:
-fgetc判断是否为EOF.
-fgets判断返回值是否为NULL.
2、二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
fread判断返回值是否小于实际要读的个数。