第10章 文件操作
目 录 文件概述 文件类型指针 文件的打开和关闭 文件的读写 文件的定位 C语言程序设计 - 第10章 文件操作
文件 (File) C语言中的文件 文本文件(ASCII文件) 二进制文件 C语言把文件看作一个字节的序列 按数据在内存中的二进制形式存储 C语言程序设计 - 第10章 文件操作
文本文件和二进制文件 C语言程序设计 - 第10章 文件操作
缓冲文件系统 C语言程序设计 - 第10章 文件操作
文件类型指针 FILE类型 举例 保存被使用的文件的有关信息 所有的文件操作都需要FILE类型的指针 FILE是库文件中定义的结构体的别名 注意不要写成struct FILE 举例 FILE *fp; C语言程序设计 - 第10章 文件操作
FILE类型 typedef struct { short level; /*缓冲区满空程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*无缓冲则不读取字符*/ short bsize; /*缓冲区大小*/ unsigned char *buffer; /*数据缓冲区*/ unsigned char *curp; /*当前位置指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ } FILE; C语言程序设计 - 第10章 文件操作
文件的打开 (fopen函数) 函数原型 参数说明 返回值 FILE *fopen(char *filename, char *mode); 若成功,返回指向被打开文件的指针 若出错,返回空指针NULL(0) C语言程序设计 - 第10章 文件操作
文件的打开模式 打开模式 描 述 r 只读,打开已有文件,不能写 w 只写,创建或打开,覆盖已有文件 a 描 述 r 只读,打开已有文件,不能写 w 只写,创建或打开,覆盖已有文件 a 追加,创建或打开,在已有文件末尾追加 r+ 读写,打开已有文件 w+ 读写,创建或打开,覆盖已有文件 a+ 读写,创建或打开,在已有文件末尾追加 t 按文本方式打开 (缺省) b 按二进制方式打开 C语言程序设计 - 第10章 文件操作
文件的打开举例 FILE *fp1, *fp2, *fp3; char filename[]="file3.dat"; if (!(fp1=fopen("file1", "r"))) { printf("Cannot Open This File!\n"); exit(0); /* 退出程序 */ } /* 以二进制读写方式打开FILE2.TXT */ fp2=fopen("C:\\HOME\\FILE2.TXT", "rb+"); /* 以二进制读写方式打开file3.dat */ fp3=fopen(filename, "a+b"); C语言程序设计 - 第10章 文件操作
文件的关闭 (fclose函数) 函数原型 参数说明 返回值 不用的文件应关闭,防止数据破坏丢失 int fclose(FILE *fp); 若成功,返回0 若出错,返回EOF(-1) 不用的文件应关闭,防止数据破坏丢失 C语言程序设计 - 第10章 文件操作
文件的关闭举例 FILE *fp; char file[]="D:\\USER\\STUDENTS.DAT"; if (!(fp=fopen(file, "rb+"))) { printf("Open file %s error!\n", file); exit(0); } ... ... fclose(fp); C语言程序设计 - 第10章 文件操作
文件的读写 函数 功能 fputc 输出字符 fprintf 格式化输出 fgetc 输入字符 fscanf 格式化输入 putc putw 输出一个字 getc getw 输入一个字 fwrite 输出数据块 fputs 输出字符串 fread 输入数据块 fgets 输入字符串 C语言程序设计 - 第10章 文件操作
feof函数 函数原型 参数 返回值 int feof(FILE *fp); fp:文件指针 若文件结束,返回非零值 若文件尚未结束,返回0 C语言程序设计 - 第10章 文件操作
fputc/putc函数 函数原型 参数 返回值 int fputc(int c, FILE *fp); int putc(int c, FILE *fp); 参数 c :要输出到文件的字符 fp:文件指针 返回值 若成功,返回输出的字符 若失败,返回EOF C语言程序设计 - 第10章 文件操作
fgetc/getc函数 函数原型 参数 返回值 int fgetc(FILE *fp); int getc(FILE *fp); 若成功,返回输入的字符 若失败或文件结束,返回EOF C语言程序设计 - 第10章 文件操作
fputc和fgetc函数举例 FILE *fp1, *fp2; char c; fp1 = fopen("file.in", "r"); fp2 = fopen("file.out", "w"); while(!feof(fp1)) { c = fgetc(fp1); fputc(c, fp2); } fclose(fp1); fclose(fp2); C语言程序设计 - 第10章 文件操作
fwrite和fread函数 (1) 函数原型 size_t fwrite(void *buffer, size_t size, size_t count, FILE *fp); size_t fread (void *buffer, C语言程序设计 - 第10章 文件操作
fwrite和fread函数 (2) 参数 返回值 buffer:要读/写的数据块地址 size :要读/写的每个数据项的字节数 count :要读/写的数据项数量 fp :文件指针 返回值 若成功,返回实际读/写的数据项数量 若失败,一般返回0 C语言程序设计 - 第10章 文件操作
fwrite和fread函数举例 FILE *fp; int i; struct stud s[NUM]; fp=fopen("students.dat","rb+"); for (i=0; i<NUM; i++) fwrite(s+i,sizeof(struct stud),1,fp); fread(s+i,sizeof(struct stud),1,fp); fclose(fp); C语言程序设计 - 第10章 文件操作
fprintf和fscanf函数 函数原型 说明 int fscanf(FILE *fp, char *format[,address,...]); int fprintf(FILE *fp, char *format[,argument,...]); 说明 与printf和scanf函数类似 从文件输入或输出到文件 C语言程序设计 - 第10章 文件操作
putw函数 函数原型 参数 返回值 int putw(int w, FILE *fp); w :要输出到文件的整数(字) fp:文件指针 若成功,返回输出的整数(字) 若失败,返回EOF C语言程序设计 - 第10章 文件操作
getw函数 函数原型 参数 返回值 int getw(FILE *fp); fp:文件指针 若成功,返回输入的整数(字) 若失败,返回EOF C语言程序设计 - 第10章 文件操作
fputs函数 函数原型 返回值 说明 int fputs(char *s, FILE *fp); 若成功,返回输出字符个数(或最后的字符) 若失败,返回EOF 说明 字符串的结束标志'\0'不会输出到文件 也不会在字符串末尾自动添加换行符 C语言程序设计 - 第10章 文件操作
fgets函数 函数原型 返回值 说明 char *fgets(char *s, int n, FILE *fp); 若成功,返回s首地址;若失败,返回NULL 说明 从fp输入字符串到s中 输入n-1个字符,或遇到换行符或EOF为止 读完后自动在字符串末尾添加'\0' C语言程序设计 - 第10章 文件操作
文件的定位 文件位置指针 相关函数 位置指针指向当前读写的位置 每次读写文件,位置指针都会相应移动 可以通过相关函数强制修改位置指针 rewind函数 fseek函数 ftell函数 C语言程序设计 - 第10章 文件操作
rewind函数 函数原型 参数 功能 void rewind(FILE *fp); fp:文件指针 使文件位置指针重新返回文件开头 C语言程序设计 - 第10章 文件操作
fseek函数 (1) 函数原型 参数 功能 int fseek(FILE *fp, long offset, int whence); 随机改变文件的位置指针 C语言程序设计 - 第10章 文件操作
fseek函数 (2) 起始位置 举例 SEEK_SET(0):文件开始 SEEK_CUR(1):文件当前位置 SEEK_END(2):文件末尾 举例 fseek(fp, 100L, SEEK_SET); fseek(fp, -10L, SEEK_CUR); fseek(fp, -20L, SEEK_END); C语言程序设计 - 第10章 文件操作
ftell函数 函数原型 参数 返回值 long ftell(FILE *fp); fp:文件指针 若成功,返回当前文件指针位置 C语言程序设计 - 第10章 文件操作
结束 The End C语言程序设计 - 第10章 文件操作