文件操作(对数据文件进行操作)
分类
程序文件(后缀为.c .obj .exe等)
数据文件(程序运行时对写的数据)
文件名
文件名=文件路径+文件名主干+文件后缀
数据文件类型
文本文件
二进制文件
文件缓存区
输入缓存区
输出缓存区
文件指针
每个被使用的文件在内存中开辟了一个相应的文件信息区,用来存放文件相关信息(文件名,文件状态,文件位置等),这些信息是保存在一个结构体变量中的,该结构体类型是有系统声明的,取名为FILE
文件的打开与关闭
文件的打开
fopen(const char* filename,const char* mode)//文件名,打开文件的防范方式
int main() { //相对路径, // ..表示上一级路径 // .表示当前路径 FILE*pf= open ("test.txt",“r”); // /的转义 绝对路径 FILE*pf= fopen(“c:\\test\\test.txt”); return 0; }
当fopen打开文件失败时,fopen返回一个NULL空指针
文件的关闭
int fclose(FILE*stream); free(FILE*stream);
文件的顺序读写
写:
fputc(‘a’,pfwrite);
读:
fgetc(pfread);
从键盘输入
输出到屏幕
键盘and屏幕都是外部设备
键盘-标准输入设备-stdin
屏幕-标准输出设备-stdout
是一个程序默认打开的俩个流设备
stdin FILE*类型
stdout FILE*,类型
stderr FILE* 类型
int main() { int ch=fgetc(stdin); fputc(ch,stdout); }
文件的顺序读写
字符形式输入输出fputc,fgetc||每次读写一个字符
int fputc( int char, FILE *stream );
//char指被写入字符,stream是指指向FILE对象的指针
//fputc返回值为:若成功则返回被写入的字符,若错误,返回EOF
int fgetc(FILE *stream);
//stream是指指向FILE对象的指针
//fgetc返回值为:该函数以无符号char强制转换为int的形式返回读取的字符
//如果到达文件末尾或发生读错误,则返回EOF
文本行形式输入输出fputs,fgets||每次读写一行
int fputs(const char *str, FILE *stream);
//str是个数组,包含了要写入的以空字符终止的字符序列
//stream是指指向FILE对象的指针
//fputs返回值:该函数返回一个非负值,如果发生错误则返回EOF
char *fgets(char *str, int n, FILE *stream)
//str是一个指向字符数组的指针,该数组储存了要读取的字符串
//n是指读取的最大字符数(包括最后的空字符)
//stream是指指向FILE对象的指针
//fgets返回值:若成功,该函数返回相同的str参数,若到达文件末尾或者没有读取到任何字符串,str内容保持不变,并返回一个空指针,若失败,则返回一个空指针
格式化输入输出fscanf,fprintf
int fscanf(FILE *stream, const char *format, ...);
//stream是指指向FILE对象的指针
//format这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符
//...附加参数
//后俩个参数与scanf类似
//fscanf返回值:若成功,则返回成功匹配和赋值的个数,若到达文件末尾或者发生度读错误,则返回EOF
int fprintf(FILE *stream, const char *format, ...);
//stream是指指向FILE对象的指针
//format 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化
//...附加参数
//后俩个参数与printf类似
//fprintf返回值:若成功,则返回写入的字符总数,若失败,则返回一个负数
二进制输入输出fwrite,fread
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//ptr是指指向要被写入的元素数组的指针
//size是指被写入的每个元素的大小,单位是字节
//nmemb是指元素的个数,每个元素的大小为size字节大小
//stream是指指向FILE对象的指针
//fwrite返回值:若成功,返回一个size_t对象,表示元素的总数
//该对象是一个整型数据类型,若该数字与nmemb参数不同,则会显示一个错误
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//ptr是指指向带有最小尺寸size*nmemb字节的内存块的指针
//size是指要读取的每个元素的大小,单位是字节
//nmemb是指元素个数,每个元素大小为size字节
//stream是指指向FILE对象的指针
//fread返回值:成功读取的元素总数会返回一个size_t对象,表示元素的总数
//该对象是一个整型数据类型,若该数字与nmemb参数不同,则可能发生了一个错误或者到达了文件末尾
文件的随机读取
定位——fseek
int fseek(FILE *stream, long int offset, int whence);
//stream是指指向FILE对象的指针
//offset是指相对与whence的偏移量,单位是字节
//whence是指开始添加偏移offset的位置,它一般指定为下列常量之一:SEEK_SET(文件的开头),SEEK_CUR(文件指针的当前位置),SEEK_END(文件的末尾)
//fseek返回值:若成功,则返回0,若失败,则返回非0值
其他函数
ftell
long int ftell(FILE *stream);
//stream是指指向FILE对象的指针
//ftell返回值:该函数返回位置标识符的当前值,若发生错误,则返回-1L
rewind
void rewind(FILE *stream);
//stream是指指向FILE对象的指针
//无返回值,其作用是设置文件位置为给定流stream的文件的开头
feof and ferror
int feof(FILE *stream);
//stream是指指向FILE对象的指针
//feof返回值:当设置了与流相关的**文件结束标识符**时,该函数返回一个非零值,否值返回0
int ferror(FILE *stream);
//stream是指指向FILE对象的指针
ferror返回值:当设置了与流相关的**错误标识符**时,该函数返回一个非零值,否值返回0
strerror and perror
char *strerror(int errnum);
//#include <string.h>
//errnum是错误号,通常为errno
//strerror返回值:该函数返回一个指向错误字符串的指针,该错误字符串描述了错误
void perror(const char *str);
//str这和C字符串,包含一个自定义消息,将显示在原本的错误信息之前
//无返回值,推荐使用perror,而非strerror
C库宏-errno
extern int errno;
//#include <errno.h>
//参数:NA
//返回值:NA