c语言程序设计王勇第16章文件化学_第1页
c语言程序设计王勇第16章文件化学_第2页
c语言程序设计王勇第16章文件化学_第3页
c语言程序设计王勇第16章文件化学_第4页
c语言程序设计王勇第16章文件化学_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 16 章 文件第一节 c文件概述一、文件的概念: 存储在外部介质上数据的集合,是操作系统数据管理的单位二、使用数据文件的目的1、数据文件的改动不引起程序的改动 程序与数据分离2、不同程序可以访问同一数据文件中的数据 数据共享3、能长期保存程序运行的中间数据或结果数据1. 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成2. 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等)3. 按数据的组织形式: 文本文件: ascii文件,每个字节存放一个字符的ascii码 二进制文件:数

2、据按其在内存中的存储形式原样存放三、文件分类如 int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ascii形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果49 48 48 48 48一、文件结构体file第二节 文件类型指针二、文件类型指针的定义格式: file *指针变量名;用法: file *fp1, *fp2;typedef struct int _fd; /文件号 int _cleft; /缓冲区中

3、剩下的字符数 int _mode; /文件操作方式 char *_next; /文件当前读写位置 char *_buff; /文件缓冲区位置file;c文件操作用库函数实现,包含在stdio.h&文件使用方式:打开文件-文件读/写-关闭文件&系统自动打开和关闭三个标准文件:v标准输入-键盘 stdinv标准输出-显示器 stdoutv标准出错输出-显示器 stderr打开文件fopenv函数原型: file *fopen(char *name,char *mode)v功能:按指定方式打开文件v返值:正常打开,为指向文件结构体的指针; 打开失败,为null要打开的文件名使用文件方式例 文件打开与

4、测试 file *fp; fp=fopen(“aa.c”,“w”); if(fp=null) printf(“file open error!n”); exit(0); 例 file *fp; fp= fopen (“c:fengyibkctest.dat”,”r”); 例 file *fp; char *filename=“c:fengyibkctest.dat” fp= fopen(filename,”r”); “r+/rb+” (读写)“a/ab” (追加)“w/wb” (只写)“r/rb” (只读)“w+/wb+” (读写)“a+/ab+” (读写)为输入输入打开一个文本/二进制文件为

5、输出输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加追加数据文件使用方式含义第三节 文件的打开二、功能第四节 文件的关闭一、格式fclose(file *fp)关闭fp指向的文件文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fclose不关闭文件可能会丢失数据一、单字符输入与输出第五节 文件的读写1. fputc(c, file *fp)功能:把一字节代码c写入fp指向的文件中返值:正常,返回c;出错,为eof例: fputc(a, fp)

6、2. fgetc(file *fp)功能:从fp指向的文件中读取一字节代码返值:正常,返回c;出错,为eof例: char ch; ch=fgetc(fp);二、文件结束函数feof格式: feof(fp) 功能:判断指针fp所指向的文件是否到了文件尾返值:文件结束, 返回真(非0); 文件未结束,返回01. 文本文件判断格式while(ch=fgetc(fp)!=eof)2. 二进制文件判断格式while( !feof(fp) ) c=fgetc(fp); . 第七节 格式化输入输出格式: fscanf(文件指针, “格式控制串”, 输入项表)功能: 从文件指针所指的文件中按格式读取数据,

7、存入输入项表中返值:成功,返回i/o的个数;出错或文件尾,返回eof一、fscanf函数格式: fprintf(文件指针, “格式控制串”, 输出项表功能: 将输入项表中的数据按格式存入文件指针所指 的文件中返值:成功,返回i/o的个数;出错,返回eof二、fprintf函数fscanf(fp,“%d,%f”, &i, &t); /若文件中有3,4.5 ,则将3送入i, 4.5送入t例 fprintf(fp,“%d,%6.2f”,i,t); /将i和t按%d,%6.2f格式输出到fp所指文件例例 从键盘按格式输入数据存到磁盘文件中去从键盘按格式输入数据存到磁盘文件中去#include main

8、() char s80,c80; int a,b; file *fp; if(fp=fopen(test,w)=null) puts(cant open file); exit() ; fscanf(stdin,%s%d, s, &a); fprintf(fp,%s %d, s, a); fclose(fp); 例例 从磁盘文件中按格式读入数据放入指定变量从磁盘文件中按格式读入数据放入指定变量#include main() char c80; int b; file *fp; if(fp=fopen(test,r)=null) puts(cant open file); exit(); fsc

9、anf(fp,“%s%d”,c,&b); fprintf(stdout,%s %d,c,b); fclose(fp); 第八节 字符串输入输出格式: fgets(地址, n, 文件指针)功能: 从文件指针所指的文件中读取n-1个字符,存入 指定地址开始的存储单元中,返回这个地址一、fgets函数格式: fputs(字符串, 文件指针功能: 将字符串写入文件指针所指的文件中返值:成功,返回正整数,出错,返回eof(-1)二、fputs函数说明:1. 输出时字符串最后的0并不输出,也不自动加n2. 形成的文件中字符串首尾相接,为便于阅读,可人为加入n说明:1. 若碰到换行符或文件结束标志(eof)

10、,读入结束2. 该函数最多能读入 n-1 个字符3. 读入结束,系统会自动在最后加一个0例例 从键盘读入字符串存入文件从键盘读入字符串存入文件#includemain() file *fp; char string81; if(fp=fopen(file.txt,w)=null) printf(cannt open file);exit(0); while(strlen(gets(string)0) fputs(string,fp); fputs(n,fp); fclose(fp);例例 从文件读出字符串从文件读出字符串#includemain() file *fp; char string8

11、1; if(fp=fopen(file.txt,r)=null) printf(cannt open file);exit(0); while(fgets(string,81,fp)!=null) fputs(string,stdout); fclose(fp);第九节 数据块输入输出函数 fread与fwrite一、fread函数例:若有struct st char num8; float mk5; pers30;格式: fread(buffer, size, count,fp);功能: 从文件中读出 count 个 size大小的数据块, 存入buffer开始的空间中。i=0;fread(

12、&persi,sizeof(struct st),1,fp);从fp所指的文件中读取1块大小为sizeof(struct st)的数据块,放入pers0开始的存储空间中,即给pers0中的各个成员赋值二、fwrite函数例:若有struct st char num8; float mk5; pers30;格式: fwrite(buffer, size, count,fp);功能: 将 从buffer开始的地址中,count 个 size大小 的数据块,写入fp所指的文件中 for (i=0;i30;i+)fwrite(&persi,sizeof(struct st),1,fp);将结构体数组的所有数据写入fp所指的文件, 每次写入sizeof(struct st)大小的字节例 float f2; file *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp);for(i=0;i0 向后移动0 向前移动起始点文件开始 seek_set 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论