1、C语言中关于文件操作C语言中的文件C语言把文件看作一个字节的序列C语言对文件的存取是以字节为单位的文本文件(ASCII 文件)按数据的 ASCII形式存储二进制文件按数据在内存中的二进制形式存储文本文件和二进制文件缓冲文件系统文件类型指针FILE类型保存被使用的文件的有关信息所有的文件操作都需要 FILE类型的指针FILE是库文件中定义的结构体的别名注意不要写成 struct FILE举例 FILE *fp;FILE类型typedef struct short level; /*缓冲区满空程度*/unsigned flags; /*文件状态标志*/char fd; /*文件描述符*/unsig
2、ned char hold; /*无缓冲则不读取字符*/short bsize; /*缓冲区大小*/unsigned char *buffer; /*数据缓冲区*/unsigned char *curp; /*当前位置指针*/unsigned istemp; /*临时文件指示器*/short token; /*用于有效性检查*/ FILE;文件的打开 (fopen 函数)函数原型FILE *fopen(char *filename, char *mode);参数说明filename: 要打开的文件路径mode: 打开模式返回值若成功,返回指向被打开文件的指针若出错,返回空指针 NULL(0)打
3、开模式 描 述r 只读,打开已有文件,不能写w 只写,创建或打开,覆盖已有文件a 追加,创建或打开,在已有文件末尾追加r+ 读写,打开已有文件w+ 读写,创建或打开,覆盖已有文件a+ 读写,创建或打开,在已有文件末尾追加t 按文本方式打开 (缺省)b 按二进制方式打开文件的打开模式文件的关闭 (fclose 函数)函数原型 int fclose(FILE *fp);参数说明fp:要关闭的文件指针返回值若成功,返回 0若出错,返回 EOF(-1)不用的文件应关闭,防止数据破坏丢失函数 功能 函数 功能fputc 输出字符 fprintf 格式化输出fgetc 输入字符 fscanf 格式化输入p
4、utc 输出字符 putw 输出一个字getc 输入字符 getw 输入一个字fwrite 输出数据块 fputs 输出字符串fread 输入数据块 fgets 输入字符串文件的读写feof函数函数原型 int feof(FILE *fp);参数 fp:文件指针返回值若文件结束,返回非零值若文件尚未结束,返回 0fputc/putc函数函数原型int fputc(int c, FILE *fp);int putc(int c, FILE *fp);参数c :要输出到文件的字符fp:文件指针返回值若成功,返回输出的字符若失败,返回 EOFfgetc/getc函数函数原型int fgetc(FIL
5、E *fp);int getc(FILE *fp);参数fp:文件指针返回值若成功,返回输入的字符若失败或文件结束,返回 EOF12月 12日 22:37 于实验室/*中英汉字显示程序*/ char far* get_ascii_rom(unsigned int reg_bx)/*获得 ROM字符集首址*/ struct REGPACK reg; reg.r_ax=0x1130; reg.r_bx=reg_bx; intr(0x10, return MK_FP(reg.r_es,reg.r_bp); void textout(int x,int y,unsigned char *s,int c
6、olor) /*功能:中-英混合输出函数,在屏幕以(x,y)为左上角输出 color色的 s中-英混合字符串 限制:生成的 EXE文件同级目录要有 hzk16文件,否则其中的中文将看不到 */ unsigned char mat32,i,j,is_hz,can_put,far *ROM; unsigned long position; ROM=get_ascii_rom(0x0600);/*获取 8*16 ASCII字符 ROM指针*/ while(*s!=0)/*开始输出文字循环*/ if(*s0xa0/*计算区号*/ j=*(s+1)-0xa0;/*计算位号*/ position=(94*(i-1)+(j-1)*32l;/*计算中文字模位置*/ fseek(fp,position,SEEK_SET);/*移动文件指针到字模位置*/ fread(mat,32,1,fp);/*读取为中文字模*/ else memset(mat,0,32);/*否则将输出空白*/ is_hz=1;/*为中文*/ else /*若为英文读取英文字模*/ for(i=0;ii%8)/*将英文字模显示时下移 4pixel,这样看起来美观些*/ if(is_hz) x+=18;/*中文间距为 18pixel*/ s+=2; else x+=9;/*英文间距为 9pixel*/ s+;