c语言程序设计 文件_第1页
c语言程序设计 文件_第2页
c语言程序设计 文件_第3页
c语言程序设计 文件_第4页
c语言程序设计 文件_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

国守锚瓯盥器

#include<math.h>

»第九章

#defineEPS1

voidmain

[对月目定义函数原型说明

scan

doub

double

while(

n=n+l;

信息科学技术学院C语言程序设计教学组

±||

第九章文件

内容提要:

文本文件与二进制文件文件分类

缓冲文件系统概念缓冲文件系统

文件的指针文件的指针

文件的打开与关闭文件打开与关闭

文件应用文件应用

第九章文件

文件是指存储在外部介质

上,且按文件名访问的一组

信息序列。

一、文件分类

❶文本文件(字符代码文件或ASCII代码文件)

由一个一个字符组成,每一个字符用一个

ASCII代码表示,如123.45以ASCII代码形式

存储到磁盘需要6个字节。

特点:可通过显示器或打印机显示,即可读,

比较直观。

一、文件分类

❷非文本文件(二进制文件):是指以数据

在内存中的存储形式原样输出存储到磁盘上的

文件。如123.45在内存中以浮点数形式存储占

4个字节,不管一个实数多大都占4字节。

特点:节省存储空间,输入输出无需转换

速度快,不便阅读。

说明:

❶一个c文件是一个字节流或二进制流,它把

数据看作是一连串的字符序列(字节),而不

考虑记录的界限,即c文件并不是由记录组成的。

❷由于对文件的操作要与各种外部设备发生联

系,因此对文件的输入输出(读写)过程是通

过操作系统来实现的。对文件的读写都是通过

标准的I/O函数进行的。

二、缓冲文件系统(标准I/O)和非缓冲文件系统

❶缓冲文件系统(又称标准或高层文件系统)

特点:对程序中的每一个文件都在内存中开辟

一个“缓冲区”。

作用:从磁盘文件读入的数据先送到“输入缓

冲区”中,然后再从缓冲区依次将数据送给接

收变量。

程序数据区(512KB)

在向磁盘文件输出数据时,先将程序数据区中变量

或表达式的值送到“输出文件缓冲区”中,待装满后

才一起输出给磁盘文件。目的减少对磁盘的读写次数,

即一次可以读入一批数据或输出一批数据。

二、缓冲文件系统(标准I/O)和非缓冲文件系统

❷非缓冲文件系统:不由系统自动设置所需

缓冲区,而由用户自己根据需要设置。

❸新的ANSI标准只建议使用缓冲系统,并对

缓冲文件系统的功能进行了扩充,使既能用于

处理字符代码文件,也能处理二进制文件。

三、文件型指针类型

对文件的操作是通过文件指针实现的。关键

的概念是“”。

调用一个文件需要的信息:.

❶文件当前读写的位置;

❷与该文件对应的内存缓冲区的地址;

❸缓冲区未被处理的字符数(字符指针);

❹文件的操作方式等

JL>1II1I11y.x-lilLlASP]\生

三、文件型指针类型

系统内部定义了一个称FILE的结构型类型。

typedefstruct{

int_fd;//文件号

int_cleft;//缓冲区中剩余的字符

int_mode;//文件操作模式

char*nextc;//下一个字符位置

char*_buff;//文件缓冲区位置

1FILE;

四、文件的打开和关闭

1.打开文件:是在用户程序和操作系统之

间建立起联系,程序要把操作的文件的一些信

息通知操作系统,如文件名、文件操作方式

(读/写):

需要先确认此文件是否已存在,并

将读当前位置设定为文件的开头。

写文件:需要检查原来是否有同名文件,如

有则将该文件原有内容删除,如无同名文件就

建立一个新文件,然后将写当前位置设定于文

件的开头,以便从文件开头写入数据。

1.文件的打开方式:

FILE*fp;

if((fp二"pen(〃文件名〃,〃使用文件方式〃))二二NULL){

printf(z,cannotopenthisfile.'n");

exit(0);

)

说明:

❶文件名可以是字符串常量、数组名或字符指针。

❷使用文件方式参见附表。

FILE*fp;

if((fp=fopen(〃文件名〃,〃使用文件方式〃))二二NULL){

printf(,zcannotopenthisfile.'n");exit(0);

)

文件使用方式含义

r(只读)为输入打开一个字符文件

w(只写)为输出打开一个字符文件

a(追加)向字符文件尾部增补数据

rb(只读)为输入打开一个二进制文件

wb(只写)为输出打开一个二进制文件

ab(追加)向二进制文件尾部增补数

r+(读写)为读/写打开一个字符文件

w+(读写)为读/写建立一个新的字符文件

a+(读写)为读/写打开一个字符文件

rb+(读写)为读/写打开一个二进制文件

wb+(读写)为读/写建立一个新的二进制文件

ab+(读写)为读/写打开一个二进制文件

2.文件的关闭

文件的关闭形式:

fclose(fp);

功能:将fp所指文件关闭。

❶释放文件有关信息区;

❷将输出文件缓冲区的内容(无论缓冲区是否为满)

都输出写入文件,然后关闭文件,这样可防止丢

失本来应写入文件的数据。

五、文件应用示例

[例1]:格式化的输入输出。

功能:将输出按格式串规定输出到fp所指文件。

功能:从fp所指文件按格式串读入数据。函数执行成功

返回读得的数据项个数;若在读第一项前已到达文件

结束处,则返回EOF。

#incIude<stdio.h>

#incIude<process.h>

#incIude<string.h>

voidmain(){

FILE*fp;charname[10];intnum;fIoatscore;

if((fp=fopen("fiIe3.txt",〃w+"))二二NULL){

printf(z,cannotopenthisfile.\n〃);

exit(0);

)

printf(z,entername,num,score:,z);

,z

scanf(%s%d%f〃,name,&num,&score);

whiIe(strIen(name)>1){

fprintf(fp,"%s%d%f\n,z,name,num,score);

printf(z,entername,num,score:;

scanf(,z%s%d%f,z,name,&num,&score);

rewind(fp);

while(fscanf(fp,z,%s%d%f〃,

name,&num,&score)!=EOF)

printf(z,%-10s%6d%6.2f\n,z,name,num,score);

fcIose(fp);

)

输入:entername,num,score:zhangsan050190/

entername,num,score:liming050285/

entername,num,score:gaofei050395/

entername,num,score:000/

输出:zhangsan050190.00

1iming050285.00

gaofei050395.00

[例2]:数据块(二进制形式)的读写。

功能:从指定文件读入count个大小为size的字

节数据块,存入buffer所指存储单元。返回所

读的数据项个数,如遇文件结束或出错返回0。

功能:buffer所指存储单元的数据取

size*count个字节送fp所指文件。返回写到fp

所指文件中的数据项个数。

[例2]:数据块(二进制形式)的读写。

说明:

❶buffer'为输入输出在内存中存放的首地址。

❷siz为读、写的字节数,即数据块的大小。

❸count为输入输出的数据项个数。

❹fread()和-riteO用于二进制文件的输入

输出

#incIude<stdio.h>

#incIude<process.h>

#defineSIZE4

structstudent{

charname[10];intnum,age;charaddr[15];

}stud[SIZE];

voidsave_Ioad(){

FILE*fp;inti;

,,

if((fp=fopen(stu_Iist","wb+〃))=二NULL){

printf("cannotopenfile.'n");exit(0);

1

for(i=0;i<SIZE;i++)

if(fwrite(&stud[i],sizeof(structstudent),1,fp)!=1){

printf(,,fiIewriteerror!\n,");exit(0);

rewind(fp);

for(i=0;i<SIZE;i++)

if(fread(&stud[i],sizeof(structstudent),1,fp)!=0)

printf-1Os%4d%4d%75s\n”,stud[i].name,

stud[i].num,stud[i].age,stud[i].addr);

)

voidmain(){

inti;

for(i=0;i<SIZE;i++)

scanf(,z%s%d%d%s”,stud[i].name,&stud[i].num,

&stud[i].age,stud[i].addr);

save_Ioad();

)

输入:

zhang100119room_101/

Ii100220room_102/

wang100321room_103/

zhao100421room104/

输出:

zhang100119room_101

Ii100220room_102

wang100321room_103

zhao100421room104

[例3]:具有文件拷贝功能的程序fiIecopy.c

说明两个问题:命令行参数的应用和文件的字

符输入与输出应用。

功能:从指定文件读入一个字符。

功能:把一个字符写到指定文件中去。

[例3]:具有文件拷贝功能的程序fiIecopy.c

#incIude<stdio.h>

#incIude<process.h>

#incIude<string.h>

filecopy(FILE*fp1,FILE*fp2){

charc;

whiIe((c=fgetc(fp1))!=EOF)

fputc(c,fp2);

voidmain(intargc,char*argv[]){

filecopy(FILE*fp1,FILE*fp2);

FILE*fp1,*fp2;

if(argc>1){

if((fp1=fopen(*++argv,〃r"))二二NULL){

printf(〃can\'tfopen%s\n',*argv);exit(0);

1

if((fp2=fopen(*++argv,"w"))二二NULL){

printf(,,can\,tfopen%s\n”,*argv);exit(0);

1

fiIecopy(fp1,fp2);

)

运行时情况:

$vifiIecopy.c/

$ccfiIe.c-ofiIecopy/

$/

运行时数据状态:argc

3

argv[]

argv[0]

argv[1]

argv[2]

[例4]:文件的字符串的输入输出处理

fgets(str,n9fp)字符串输入函数。

,其功能是从fp指定的文件中读取一个串,若满足以

下条件读取结束:①已读取n-1个字符、②当前读取

到的字符是回车符、③已读取到文件尾。

/读取的字符个数至多n-1个,余下的一个字节空间作

为加''0'串结束符。

/读取回车符时,也作为一个字符送入由str所指的内

存缓冲区。然后再加一个字符串结束符'\0'

str为数组名或字符指针;n为读取字符个数。

[例4]:文件的字符串的输入输出处理

字符串输出(写)函数

其功能是将str所指定的字符串写到fp指向的文件中。

与fgets。函数在输入字符串末尾自动加(\Of特性

对应,fputs。函数在将C字符串写入文件时,其末尾

的‘\0’字符自动舍去。

fputs。与puts。功能不同,fputs。舍去串结束符

而puts。把它转换成回车符输出。

#

温馨提示

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

评论

0/150

提交评论