第10章文件操作 白雪飞 baixfaustc. edu.cn 中国科学技术大学电子科学与技术系 Dept of Elec. Sci. Tech, USTC Fal22003
白 雪 飞 baixf@ustc.edu.cn 中国科学技术大学电子科学与技术系 Dept. of Elec. Sci. & Tech., USTC Fall, 2003 第10章 文件操作
录 文件概述 ●文件类型指针 文件的打开和关闭 文件的读写 文件的定位 C语言程序设计-第10章文件操作2
C语言程序设计 - 第10章 文件操作 2 目 录 ⚫ 文件概述 ⚫ 文件类型指针 ⚫ 文件的打开和关闭 ⚫ 文件的读写 ⚫ 文件的定位
文件(File) ●C语言中的文件 C语言把文件看作一个字节的序列 ■C语言对文件的存取是以字节为单位的 文本文件(ASCI文件) 按数据的ASCI形式存储 二进制文件 ■按数据在内存中的二进制形式存储 C语言程序设计-第10章文件操作
C语言程序设计 - 第10章 文件操作 3 文件 (File) ⚫ C语言中的文件 ◼ C语言把文件看作一个字节的序列 ◼ C语言对文件的存取是以字节为单位的 ⚫ 文本文件(ASCII文件) ◼ 按数据的ASCII形式存储 ⚫ 二进制文件 ◼ 按数据在内存中的二进制形式存储
文本文件和二进制文件 内存存储形式 ASCI形式 00010111 10010110 (6)|00110110 二进制形式 (0)1001100 (6038) 3) 00010111 (8)1001100 010110 C语言程序设计-第10章文件操作4
C语言程序设计 - 第10章 文件操作 4 文本文件和二进制文件 00010111 10010110 00010111 10010110 00110110 00110000 00110011 00111000 (6038) (‘6’) (‘0’) (‘3’) (‘8’) ASCII形式 二进制形式 内存存储形式
缓 冲中 文 件 系 统 輪出文件缓冲区 程序数据区 磁盘 输 入 件 缓 冲 区 C 程 百 序 第 章 文 件 操 作
C语言程序设计 - 第10章 文件操作 5 缓冲文件系统 程序数据区 输出文件缓冲区 输入文件缓冲区 磁盘 输 输 输 输 输 输 输 输
文件类型指针 FIE类型 保存被使用的文件的有关信息 ■所有的文件操作都需要F工工E类型的指针 ■F工E是库文件中定义的结构体的别名 注意不要写成 struct FILE ●举例 ■E工LE*fp; C语言程序设计-第10章文件操作6
C语言程序设计 - 第10章 文件操作 6 文件类型指针 ⚫ FILE类型 ◼ 保存被使用的文件的有关信息 ◼ 所有的文件操作都需要FILE类型的指针 ◼ FILE是库文件中定义的结构体的别名 ◼ 注意不要写成struct FILE ⚫ 举例 ◼ FILE *fp;
FILE类型 typedef struct t shor七 1eve1;/*缓冲区满空程度*/ unsigned f1ags;/*文件状态标志*/ char fd /*文件描述符* unsigned char ho1d;/*无缓冲则不读取字符*/ short bsize;/*缓冲区大小*/ unsigned char* buffer;/*数据缓冲区*/ unsigned char*curp;/*当前位置指针*/ unsigned istemp;/*临时文件指示器* shor七 token;/*用于有效性检查* }E工LE; C语言程序设计-第10章文件操作7
C语言程序设计 - 第10章 文件操作 7 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;
文件的打开( fopen函数) 函数原型 FILE *fopen(char *filename char *mode) 参数说明 filename:要打开的文件路径 ■mode :打开模式 返回值 ■若成功,返回指向被打开文件的指针 ■若出错,返回空指针NUL(0) C语言程序设计-第10章文件操作8
C语言程序设计 - 第10章 文件操作 8 文件的打开 (fopen函数) ⚫ 函数原型 ◼ FILE *fopen(char *filename, char *mode); ⚫ 参数说明 ◼ filename:要打开的文件路径 ◼ mode :打开模式 ⚫ 返回值 ◼ 若成功,返回指向被打开文件的指针 ◼ 若出错,返回空指针NULL(0)
文件的打开模式 打开模式 描述 只读,打开已有文件,不能写 只写,创建或打开,覆盖已有文件 a 追加,创建或打开,在已有文件末尾追加 读写,打开已有文件 读写,创建或打开,覆盖已有文件 a+读写,创建或打开,在已有文件末尾追加 七 按文本方式打开(缺省) b按二进制方式打开 C语言程序设计-第10章文件操作9
C语言程序设计 - 第10章 文件操作 9 文件的打开模式 打开模式 描 述 r 只读,打开已有文件,不能写 w 只写,创建或打开,覆盖已有文件 a 追加,创建或打开,在已有文件末尾追加 r+ 读写,打开已有文件 w+ 读写,创建或打开,覆盖已有文件 a+ 读写,创建或打开,在已有文件末尾追加 t 按文本方式打开 (缺省) b 按二进制方式打开
文件的打开举例 E工LE*fp1,*fp2,*fp3; char filename [l="file3. dat"i /*以文本只读方式打开i1e1*/ if(!(fpl=fopen("filel","r)))[ printf(" Cannot Open This File!\n")i exit(0);/*退出程序*/ /*以二进制读写方式打开F工E2.Tx*/ fp2=fopen ("C:\HOME\\FILE2. TXT","rb+)i /*以二进制读写方式打开£i1e3.dat*/ fp3=fopen(filename, " a+b")i C语言程序设计-第10章文件操作10
C语言程序设计 - 第10章 文件操作 10 文件的打开举例 FILE *fp1, *fp2, *fp3; char filename[]="file3.dat"; /* 以文本只读方式打开file1 */ 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");