文件分类
程序文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
数据文件类型
数据文件被称为文本文件或者二进制文件。
二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存。
文本文件:如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件。
文件缓冲区
ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区,然后再从缓冲区逐个将数据送到程序数据区。
文件的打开和关闭
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的
关系。
FILE * fopen ( const char * filename, const char * mode );
int fclose ( FILE * stream );
文件的读写
1、fread()函数
函数原型:
unsigned int fread(void *buffer, unsigned int size, unsigned int count, FILE *fp);
函数功能:从fp所指的文件中读取数据块并存储到buffer所指向的内存中,buffer是待读入数据块存储的起始地址,size是每个数据块的大小(待读入的每个数据块的字节数),
count是最多允许读取的数据块个数(每个数据块size个字节),函数返回的是实际读到的数据块个数
2、fwrite()函数
函数原型:
unsigned int fwrite(const void *buffer, unsigned int size, unsigned int count, FILE *fp);
函数功能:将buffer指向的内存中的数据块写入fp所指的文件,buffer是待输出数据块的起始地址,size是每个数据块的大小(待输出的每个数据块的字节数),
count是最多允许写入的数据块个数(每个数据块size个字节),函数返回的是实际写入的数据块个数
(tips:用户指定的内存块大小,最小为1字节,最大为整个文件)
fread()函数和fwrite()函数是按数据块的长度来处理输入/输出的,在用文本编辑器打开文本文件时可能因发生字符转换而出现莫名其妙的结果,所以这两个函数通常用于二进制文件的输入/输出
3、fscanf()函数
函数原型:
int fscanf (FILE *fp, const char *format, ……);
fscanf(文件指针, 格式字符, 输入列表);
第一个参数为文件指针,第二个参数为格式控制符,第三个参数为地址参数表列,后两个参数与函数scanf()的参数相同
4、fprintf()函数
函数原型:
int fprintf (FILE *fp, onst char *format, ……);
fprintf(文件指针, 格式字符, 输出列表);
第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为输出参数列表,后两个参数和返回值与函数printf()相同
(用函数fscanf()和fprintf()进行文件的格式化读写,读写方便容易理解,但输入时要将ASCII字符转换成二进制数,输出时要将二进制数转换为ASCII字符,耗时较多)
5、fgets()函数
函数原型:
char *fgets(char *s,int n,FILE *fp);
函数功能:该函数从fp所指的文件中读取字符串并在字符串末尾添加‘\0’,然后存入s,最多读n-1个字符,当读到回车换行符、到达文件尾或读满n-1个字符时,就停止读取函数返回该字符串的首地址,即指针s的值,读取失败返回空指针NULL(与gets()不同的是,fgets()从指定的流读取字符串,读到换行符时将换行符也作为字符串的一部分读到字符串中来)
6、fputs()函数
函数原型:
fputs(_In_z_ const char * _Str, _Inout_ FILE * _File);
str是要输出的字符串,fp是文件指针,字符串末尾’\0’不输出
函数功能:将字符串输出到指针fp所指的文件中(与puts()不同的是,fputs()不会在写入文件的字符串末尾加上换行符’\n’)
7、fgetc()函数
函数原型:
int fgetc (FILE *fp);
函数功能:用于从一个以只读或读写方式打开的文件上读字符,从fp所值的文件中读取一个字符,并将位置指针指向下一个字符,若读取成功,则返回该字符,若读取不成功则返回EOF(EOF是一个符号常量,stdio.h中定义为-1)
8、fputc()函数
函数原型:
int fputc(int c, FILE *fp);
fp是由函数fopen()返回的文件指针,c是要输出的字符(尽管C定义为int型,但只写入低字节)
函数功能:该函数的功能是将字符c写到文件指针fp所指的文件上中,若写入错误返回EOF,否则返回字符c