文件操作
文件的打开
FILE * fopen(const char filename,const char * mode);
文件的打开操作 fopen 打开一个文件
(几种操作文件的组合)
文件的关闭操作
int fclose(FILE *fp);
fclose 关闭一个文件
文件的读写操作
读取单个字符
fgetc 从文件中读取一个字符 int fgetc(FILE * fp);
fputc 写一个字符到文件中去 int fput(int c,FILE * fp);
读取字符串
fgets 从文件中读取一个字符串 char * fgets(char * s,int n,FILE *fp);
从文件中读取字符串并在字符串末尾添加‘\0‘,然后存入s,最多读入n-1个字符
当读到换行符、到达文件末尾或者读满n-1个字符,函数返回该字符串的首地址
读取失败返回空指针NULL
因为出错和到达文件末尾都返回NULL,因此应该使用feof()和ferror()来确定函
数fget()返回NULL的实际原因
fgets()从指定的流读字符串,读到换行符时将换行符也作为字符串的一部分读到
字符串中来
fputs 写一个字符串到文件中去 int fputs(const char * s,FILE *fp);
出现写入错误返回EOF,否则返回一个非负数
fputs()不会在写入文件的字符串末尾加上换行符
按格式读写文件
fprintf 往文件中写格式化数据 int fprintf(FILE * fp,const char * format,...)
第一个参数为文件指针,第二个参数是格式控制参数,第三个是输出参数列表
fscanf 格式化读取文件中数据 int fscanf(FILE * fp,const char * format,...)
第一个参数为文件指针,第二个参数是格式控制参数,第三个是地址参数列表
按格式读写文件需要知道输出和地址参数,比较麻烦(个人认为)
按数据块读写文件
fread 以二进制形式读取文件中的数据
unsigned int fread(void * buffer,unsigned int size,unsigned int count,FILE * fp)
从fp所指的文件中读取数据并存储到buffer所指向的内存中
buffer待读入数据块的起始地址
size每个数据块的大小(待读入每个数据块的字节数)
count最多允许读取数据块的个数
函数返回的是实际读到的数据块个数
fwrite 以二进制形式写数据到文件中去
unsigned int fread(void * buffer,unsigned int size,unsigned int count,FILE * fp)
buffer待输出数据块的起始地址
size每个数据块的大小(待读入每个数据块的字节数)
count最多允许读取数据块的个数
函数返回的是实际读到的数据块个数
这两个函数常于二进制文件的输入和输出
getw 以二进制形式读取一个整数
putw 以二进制形式存贮一个整数
文件状态检查函数
feof 文件结束 int feof(FILE * fp);
ferror 文件读/写出错 int ferror(FILE *fp);
文件出现错误函数返回非0值,否则,函数返回0
clearerr 清除文件错误标志
ftell 了解文件指针的当前位置 long tell(FILE * fp);
成功返回文件当前读写位置,否则返回-1L
文件定位函数
rewind 反绕重置位置指针到文件首部 void rewind(FILE * fp);
fseek 随机定位 int fseek(FILE *fp,long offset,int fromwhere);
功能:将fp的文件位置指针从fromwhere开始移动offset个字节指示下一个要读取的位置
offset(偏移量)为正向后移动 为负向前移动 要求为长整型数据(常量数据后面要加L)
fromwhere有三种取值:SEEK_SET/0表示文件来时处 SEEK_CUR/1表示文件当前位置 SEEK_END/2表示文件结尾处
补充:
int fflush(FILE * fp);
无条件地把缓冲区的所有数据写入物理设备