文件访问
文件访问
文件 c文件概述 文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位,能永久保存数据 ★文件分类 ◆按文件的逻辑结构: ●记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 心按存储介质 ●普通文件:存储介质文件(磁盘、磁带等) ●设备文件:非存储介质(键盘、显示器、打印机等) 今按数据的组织形式: 文本文件:ASC文件,每个字节存放一个字符的ASC码 ●二进制文件:数据按其在内存中的存储形式原样存放
文件 C文件概述 – 文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位,能永久保存数据。 文件分类 ❖按文件的逻辑结构: ⚫ 记录文件:由具有一定结构的记录组成(定长和不定长) ⚫ 流式文件:由一个个字符(字节)数据顺序组成 ❖按存储介质: ⚫ 普通文件:存储介质文件(磁盘、磁带等) ⚫ 设备文件:非存储介质(键盘、显示器、打印机等) ❖按数据的组织形式: ⚫ 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 ⚫ 二进制文件:数据按其在内存中的存储形式原样存放
文本文件与二进制文件 文本文件特点 耗费存储量大、速度慢、便于对字符操作 如int型数10000 ASC形式 0011000100110000001100000011000000110000 0010011100010000 0010011100010000 内存存储形式) 二进制形式 二进制文件特点: 节约存储空间、速度快、便于存放中间结果
如 int 型数 10000 0010011100010000 内存存储形式 0010011100010000 二进制形式 0011000100110000001100000011000000110000 ASCII形式 文本文件特点: 耗费存储量大、速度慢、便于对字符操作 二进制文件特点: 节约存储空间、速度快、便于存放中间结果 文本文件与二进制文件
文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用 的文件开辟内存缓冲区 非缓冲文件系统:低级文件系统,由用户在程序中为 每个文件设定缓冲区 程序 输入文件缓冲区 指令区 缓冲文件系统: 磁盘文件 非缓冲文件系统:用户数据区 程序数据区 磁盘 缓冲区 输出文件缓冲区
– 文件处理方法 • 缓冲文件系统:高级文件系统,系统自动为正在使用 的文件开辟内存缓冲区 • 非缓冲文件系统:低级文件系统,由用户在程序中为 每个文件设定缓冲区 磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: 缓冲区 指令区 程序 用户数据区 磁盘 非缓冲文件系统:
文件类型指针 文件结构体FLE 缓冲文件系统为每个正使用的文件在内存开辟文件信 息区 ·文件信息用系统定义的名为FLE的结构体描述 ·FILE定义在 stdio. h中 typedef struct short level/*缓冲区“满”或空的程度* unsigned flags;/*文件状态(如只读、读/写)标记*/ char fd;/文件描述符* unsigned char hold;/*如果没有缓冲区,则不读取字符*/ short bsize;/*缓冲区大小 unsigned char* buffer;!/*数据缓冲区的位置* unsigned char*curp;/*当前的指针指向*/ unsigned istemp;/*临时性的文件标记*/ short token;/*用于有效性检查的标记* FLE*p;∥定义指向结构体的指针fp
文件类型指针 – 文件结构体 FILE • 缓冲文件系统为每个正使用的文件在内存开辟文件信 息区 • 文件信息用系统定义的名为FILE的结构体描述 • FILE定义在stdio.h中 typedef struct { short level;/*缓冲区“满”或空的程度*/ unsigned flags; /*文件状态(如只读、读/写)标记*/ char fd; /*文件描述符*/ unsigned char hold; /*如果没有缓冲区,则不读取字符*/ short bsize; /*缓冲区大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*当前的指针指向*/ unsigned istemp; /*临时性的文件标记*/ short token; /*用于有效性检查的标记*/ }FILE *fp;//定义指向结构体的指针fp
文件类型指针 指针变量说明:FLE*fp; ·一般步骤: 定义文件指针变量。 文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 文件操作(读或写) 文件关闭后,它的文件结构体被释放 文件名 文件使用 C程序 方式 操作系统 文件类型指针 磁盘
– 文件类型指针 • 指针变量说明: FILE *fp; • 一般步骤: – 定义文件指针变量。 – 文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 – 文件操作(读或写) – 文件关闭后,它的文件结构体被释放 文件名 文件使用 方式 文件类型指针 C程序 操作系统 磁盘
文件的打开与关闭 文件使用方式 含义 “r/rb"(只读) 为输入打开一个文本/二进制文件 “w/wb"(只写) 为输出打开或建立一个文本/二进制文件 “a/ab"(追加) 向文本/二进制文件尾追加数据 “r+/rb+"(读写) 为读/写打开一个文本/二进制文件 “w+/wb+"(读写) 为读/写建立一个文本/二进制文件 a+/ab+”(读写) 为读/写打开或建立一个文本/二进制文件 函数原型:FLE* fopen(char* namechar*mgde) 使用文件方式 功能:按指定方式打开文件 ☆返值:正常打开,为指向文件结构体的针 打开失败,为NUL(系统定义的常量 要打开的文件名
文件的打开与关闭 C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开-->读/写-->关闭 系统自动打开和关闭三个标准文件: • 标准输入------键盘 stdin • 标准输出------显示器 stdout • 标准出错输出-----显示器 stderr – 打开文件 fopen 函数 • 函数原型: FILE *fopen(char *name,char *mode) ❖功能:按指定方式打开文件 ❖返值:正常打开,为指向文件结构体的指针; 打开失败,为NULL(系统定义的常量 0 ) 要打开的文件名 使用文件方式 例 文件打开与测试 FILE *fp; fp=fopen(“aa.c”,“w”); if(fp==NULL) { printf(“File open error!\n”); exit(0); } 例 FILE *fp; fp= fopen (“c:\\fengyi\\bkc\\test.dat”,”r”); 例 FILE *fp; char *filename=“c:\\fengyi\\bkc\\test.dat” fp= fopen(filename,”r”); “r+/rb+” (读写) “a/ab” (追加) “w/wb” (只写) “r/rb” (只读) “w+/wb+” (读写) “a+/ab+” (读写) 为输入打开一个文本/二进制文件 为输出打开或建立一个文本/二进制文件 为读/写打开一个文本/二进制文件 为读/写建立一个文本/二进制文件 为读/写打开或建立一个文本/二进制文件 向文本/二进制文件尾追加数据 文件使用方式 含义
文件关闭 fclose函数 作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针,将缓冲区数据写入文件 函数原型: int fclose(FLE*fp) ☆功能:关闭fp指向的文件 令返值:正常文件打开时返回的文件类型指针 缓冲文件系统: 不关闭文件可能会丢失数据 输入文件缓冲区 磁盘文件 程序数据区 输出文件缓冲区 fclose
– 文件关闭 fclose 函数 • 作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针,将缓冲区数据写入文件 • 函数原型:int fclose(FILE *fp) ❖功能:关闭fp指向的文件 ❖返值:正常关闭为文件打开时返回的文件类型指针 0;出错时,非0 磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: fclose 不关闭文件可能会丢失数据
/参考源程序8-1.c* #include maino FILE *fp long position fp=fopen ( 8-1. txt","w) position=ftell(fp) printf( When file is created, position=%dn", position) fprintf(fp Sample data") position=ftell(tp) printf("After writing 11 characters, position=%ld\n", position) fclose(tp)
/*参考源程序8-1.c*/ #include main() { FILE *fp; long position; fp=fopen("8-1.txt","w"); position=ftell(fp); printf("When file is created,position=%d\n",position); fprintf(fp,"Sample data"); position=ftell(fp); printf("After writing 11 characters,position=%ld\n",position); fclose(fp); }
文件的读写一(831) 字符J/O: fputc与 fgetc函数 utc 函数原型: int fputc(intc,FLE*fp) 功能:把一字符c(ASC)写入fp指向的文件中 返值:正常,返回c;出错,为EOF(-1) 今 fgetc ●函数原型: int fgetc(FLE米fp) ●功能:从印指向的文件中读取一字节代码 返值:正常,返回读到的代码值;读到文件尾或出 错.为EOF
文件的读写一(8.3.1) – 字符I/O: fputc 与 fgetc 函数 • fputc – 函数原型:int fputc(int c, FILE *fp) – 功能:把一字符 c(ASCII)写入fp指向的文件中 – 返值:正常,返回c; 出错,为EOF(-1) ❖fgetc ⚫函数原型:int fgetc(FILE *fp) ⚫功能:从fp指向的文件中读取一字节代码 ⚫返值:正常,返回读到的代码值;读到文件尾或出 错,为EOF