• 1. 第10章 文件
  • 2. 10.1 问题的提出与程序示例P281例10.1 #include ”stdio.h” #include ”process.h” void main() { FILE *fp; int i; printf(”\nFile text:”);
  • 3. If((fp=fopen(”d:\\data.txt”,”r”))!=NULL) { while(!feof(fp)) { fscanf(fp,”%d”,&i); printf(” %d”,i); } fclose(fp); } else { printf (”\n cannot open file\n”); exit(1); } }
  • 4. 数据文件是一组数据的有序集合。 读操作:从外部介质中将数据装入内存 写操作:从内存中将数据输出到文件中10.2 文件操作的基本方法和基本概念10.2.1 数据文件
  • 5. C语言中,对数据文件的所有操作都必须依靠文件类型指针来完成。 文件类型指针的定义格式 FILE * 文件指针变量; 实际上FILE是一种结构体类型,用于描述文件的有关信息,其定义包含在stdio.h中。 用FILE *fp;定义了文件指针fp后,系统就开辟一个FILE结构体空间,用文件指针fp指向它。但此时fp指向的FILE结构体还未与任何文件建立联系,必须调用fopen函数为文件指针和要操作的存储在磁盘上的数据文件建立联系。10.2.2 文件类型指针
  • 6. 格式: 文件指针变量=fopen(文件名,使用文件方式) 例如:fp=fopen(“data.txt”.”r”) 以只读方式打开data.txt文件 fopen提供了三个信息: (1) 打开哪个文件,用文件名指定; (2) 使用哪种方式打开文件,在双引号中指出; (3) 使用哪个文件指针与打开的文件建立联系,将返回值赋值给文件指针。10.2.3 文件的打开——fopen
  • 7. 常用打开方式 r:以只读方式打开一个ASCII文件(r+:允许读写) w:以只写方式打开一个ASCII文件(w+:可读写,覆盖) a:以追加方式打开一个ASCII文件(a+:读和追加) rb:以只读方式打开一个二进制文件(rb+:可读写) wb:以只写方式打开一个二进制文件(wb+:可读写) ab:以追加方式打开一个二进制文件(ab+:读和追加)
  • 8. 格式: fclose(文件指针); 作用是关闭与文件指针建立联系的文件,主要目的是避免文件数据的丢失 返回值为0表示关闭文件操作正常 返回值为-1表示关闭文件时发生了错误10.2.4 文件的关闭
  • 9. 定义文件指针 打开文件,并判断是否成功打开,若打开失败,则程序退出运行状态 对文件进行读写等操作 关闭文件10.2.5 文件操作顺序
  • 10. 常用程序段: FILE * fp; if((fp=fopen(“A.dat”, “r”))==NULL) { printf(“Cannot open this file\n”); exit(0); } else { 文件的读写等操作; fclose(fp); }
  • 11. C语言将与主机相连的各种外部设备看成是一个文件,称为设备文件。 设备文件的标准输入/输出文件stdin/stdout和标准出错输出stderr是由系统打开的,不需要定义文件指针、打开文件和关闭文件。10.2.6 C语言的设备文件
  • 12. 10.3 文件的读写操作字符读写函数:fgetc和fputc 格式化读写函数:fscanf和fprintf 数据块读写函数:fread和fwrite 字符串读写函数:fgets和fputs
  • 13. 10.3.1 字符读写函数:fgetc和fputc fgetc (文件指针); 从文件指针指定的文件中读入一个字符。 fputc(字符表达式,文件指针); 向文件指针指定的文件中写一个字符(字符表达式指定的字符)。
  • 14. 10.3.2 格式化读写函数:fscanf和fprintf fscanf (文件指针,格式字符串,输入表列); 从文件指针指定的文件中按格式字符串指定的格式读入数据给输入表列中的变量。 fprintf(文件指针,格式字符串,输出表列); 将输出表列中的内容按格式字符串指定的格式输出到文件指针指定的文件中。
  • 15. 10.3.3 数据块读写函数:fread和fwrite fread (datapointer,size,count,fp); 从文件指针fp指定的文件中读入count块大小为size的数据放到datapointer指向的位置中。 fwrite (datapointer,size,count,fp); 从datapointer指向的位置中写入count块大小为size的数据到文件指针fp指定的文件中。 返回的值为count表示执行成功。
  • 16. 10.3.4 字符串读写函数:fgets和fputs fgets (字符数组名,n,文件指针); 从文件指针指定的文件中读入字符个数不超过n-1个的字符串到字符数组名指定的数组中。 fputs(字符串,文件指针); 向文件指针指定的文件中写一个字符串。
  • 17. 10.4 文件的定位10.4.1 文件的顺序存取和随机存取 文件的存取方式有两种:顺序存取和随机存取。 顺序存取:从文件的开头读写到文件的结束。 随机存取:允许从文件的任何位置开始读写操作,文件操作的位置由程序控制。 用程序控制文件内部位置指针的移动,称为文件的定位。
  • 18. 10.4.2 rewind函数 rewind(文件指针); 把文件内部的位置指针移到文件的开头。
  • 19. fseek(文件指针,位移量,起始点); 移动文件内部的位置指针到实际参数指定的位置。 起始点:取0、1、2,分别表示文件开始、当前位置和文件末尾。 位移量:表示文件内部位置指针从起点开始移动的字节数。 位移量必须是一个长整型数据。 fseek函数一般只适用于二进制文件。10.4.3 fseek函数