C语言实验指导4文件操作.docx

上传人:b****4 文档编号:24274223 上传时间:2023-05-25 格式:DOCX 页数:22 大小:21.32KB
下载 相关 举报
C语言实验指导4文件操作.docx_第1页
第1页 / 共22页
C语言实验指导4文件操作.docx_第2页
第2页 / 共22页
C语言实验指导4文件操作.docx_第3页
第3页 / 共22页
C语言实验指导4文件操作.docx_第4页
第4页 / 共22页
C语言实验指导4文件操作.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C语言实验指导4文件操作.docx

《C语言实验指导4文件操作.docx》由会员分享,可在线阅读,更多相关《C语言实验指导4文件操作.docx(22页珍藏版)》请在冰豆网上搜索。

C语言实验指导4文件操作.docx

C语言实验指导4文件操作

实验4文件操作

实验目的

1.掌握文件、缓冲文件系统、文件指针的概念。

2.学会使用缓冲文件系统中的文件打开、关闭、读、写等文件操作函数。

预备知识

C语言中没有输入输出语句,所有的输入输出功能都用ANSIC提供的一组标准库函数来实现。

常见的文件操作标准库函数有:

    文件的打开操作fopen打开一个文件

    文件的关闭操作fclose关闭一个文件

    文件的读写操作fgetc从文件中读取一个字符

           fputc写一个字符到文件中去

           fgets从文件中读取一个字符串

           fputs写一个字符串到文件中去

           fprintf往文件中写格式化数据

           fscanf格式化读取文件中数据

           fread以二进制形式读取文件中的数据

           fwrite以二进制形式写数据到文件中去

   文件状态检查函数feof文件结束

           ferror文件读/写出错

           clearerr清除文件错误标志

           ftell了解文件指针的当前位置

      文件定位函数rewind反绕

           fseek随机定位

*****************************************************************************

文件的打开fopen

*****************************************************************************

 1.函数原型

FILE*fopen(char*pname,char*mode)

 2.功能说明

  按照mode规定的方式,打开由pname指定的文件。

打开文件的作用是:

(1)分配给打开文件一个FILE类型的文件结构体变量,并将有关信息填入文件结构体变量;

(2)开辟一个缓冲区;

(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

FILE*:

指出fopen是一个返回文件类型的指针函数;

 3.参数说明

pname:

是一个字符指针,它将指向要打开或建立的文件的文件名字符串。

mode:

是一个指向文件处理方式字符串的字符指针。

mode有下列几种形态字符串:

r打开只读文件,该文件必须存在。

r+打开可读写的文件,该文件必须存在。

w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。

若文件不存在则建立该文件。

w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。

若文件不存在则建立该文件。

a以附加的方式打开只写文件。

若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

a+以附加方式打开可读写的文件。

若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

 4.返回值

   正常返回:

被打开文件的文件指针。

   异常返回:

NULL,表示打开操作不成功。

例如:

#include

voidmain(){

FILE*fp;//定义一个名叫fp文件指针

//判断按读方式打开一个名叫a.txt的文件是否失败

if((fp=fopen("a.txt","r"))==NULL)//打开操作不成功

{

printf("Thefilecannotbeopened.\n");

exit

(1);//结束程序的执行

}

//如果成功执行文件读写。

略。

fclose(fp);//关闭文件

}

 要说明的是:

C语言将计算机的输入输出设备都看作是文件。

例如,键盘文件、屏幕文件等。

ANSIC标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。

这三个文件的文件指针分别是:

标准输入stdin、标准输出stdout和标准出错stderr。

*****************************************************************************

文件的关闭fclose

*****************************************************************************

1.函数原型

intfclose(FILE*fp);

2.功能说明

  关闭由fp指出的文件。

如果文件还未写完,则要求先写完再关闭。

此时调用操作系统提供的文件关闭功能,关闭由fp->fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。

EOF是用#define定义的符号常量,值为-1。

3.参数说明

  fp:

一个已打开文件的文件指针。

4.返回值

  正常返回:

0。

  异常返回:

EOF,表示文件在关闭时发生错误。

*****************************************************************************

从文件中读一个字符fgetc

*****************************************************************************

  1.函数原型

intfgetc(FILE*fp);

  2.功能说明

    从fp所指文件中读取一个字符。

  3.参数说明

    fp:

这是个文件指针,它指出要从中读取字符的文件。

  4.返回值

    正常返回:

返回读取字符的代码。

    非正常返回:

返回EOF。

例如,文件读完了,没有数据了,则返回EOF。

另,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。

  5.实例

显示指定文件a.txt的内容。

#include

voidmain(){

intch;

FILE*fp;//定义文件类型指针

//按读方式打开文件

if((fp=fopen("a.txt","r"))==NULL)

{

printf("Thefilecannotbeopened.\n");//打开操作不成功

return;//结束程序的执行

}

//成功打开了文件

ch=fgetc(fp);//从fp所指文件的当前指针位置读取一个字符

while(ch!

=EOF)//判断刚读取的字符是否是文件结束符

{

putchar(ch);//若不是结束符,将它输出到屏幕上显示

ch=fgetc(fp);//继续从fp所指文件中读取下一个字符

}//完成将fp所指文件的内容输出到屏幕上显示

fclose(fp);//关闭fp所指文件

}

*****************************************************************************

写一个字符到文件fputc

*****************************************************************************

写一个字符到文件中去

1.函数原型

intfputc(intch,FILE*fp)

2.功能说明

  把ch中的字符写入由fp指出的文件中去。

3.参数说明

  ch:

是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。

  fp:

这是个文件指针,指出要在其中写入字符的文件。

4.返回值

  正常返回:

要写入字符的代码。

  非正常返回:

返回EOF。

例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。

5.实例

将a.txt的内容复制到另一个文件b.txt中去。

#include

voidmain()//命令行参数

{

intch;

FILE*in,*out;//定义in和out两个文件类型指针

//按读方式打开由a.txt

if((in=fopen("a.txt","r"))==NULL)

{

printf("Thefile<%s>cannotbeopened.\n","a.txt");

return;//打开失败,结束程序的执行

}

//成功打开了a.txt,再按写方式打开b.txt

if((out=fopen("b.txt","w"))==NULL)

{

printf("Thefile%scannotbeopened.\n","b.txt");

return;//打开失败,结束程序的执行

}

//成功打开了b.txt文件

ch=fgetc(in);//从in所指文件的当前指针位置读取一个字符

while(ch!

=EOF)//判断刚读取的字符是否是文件结束符

{

fputc(ch,out);//若不是结束符,将它写入out所指文件

ch=fgetc(in);//继续从in所指文件中读取下一个字符

}//完成将in所指文件的内容写入(复制)到out所指文件中

fclose(in);//关闭in所指文件

fclose(out);//关闭out所指文件

}

*****************************************************************************

从文件中读取一个字符串fgets

*****************************************************************************

1.函数原型

  char*fgets(char*str,intn,FILE*fp)

2.功能说明

  从由fp指出的文件中读一行字符(包括换行符’\n’),并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。

如果一行字符太多,则最多读n-1个,放到str中去,此时没有’\n’,但’\0’仍然是必须加的。

3.参数说明

  str:

接收字符串的内存地址,可以是数组名,也可以是指针。

  n:

指出要读取字符的个数。

  fp:

这是个文件指针,指出要从中读取字符的文件。

4.返回值

正常返回:

返回字符串的内存首地址,即str的值。

非正常返回:

返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。

例如,要从"写打开"文件中读取字符串,将

发生错误而返回一个NULL值。

*****************************************************************************

写一个字符串到文件fputs

*****************************************************************************

1.函数原型

intfputs(char*str,FILE*fp)

2.功能说明

  把由str指出的字符串写入到fp所指的文件中去。

3.参数说明

  str:

指出要写到文件中去的字符串。

  fp:

这是个文件指针,指出字符串要写入其中的文件。

4.返回值

  正常返回:

写入文件的字符个数,即字符串的长度。

  非正常返回:

返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。

例如,要往一个"读打开"文件中写字符串时,

会发生错误而返回一个NULL值。

5.实例

以下程序将文件b.txt的内容附加到文件a.txt的末尾。

#include

#defineSIZE512

voidmain()

{

charbuffer[SIZE];

FILE*fp1,*fp2;

//按追加方式打开a.txt

if((fp1=fopen("a.txt","a"))==NULL)

{

printf("Thefile%scannotbeopened.\n","a.txt");

return;

}

if((fp2=fopen("b.txt","r"))==NULL)

{

printf("Thefile%scannotbeopened.\n",”b.txt”);

return;

}

//读入一行立即写出,直到文件结束

while(fgets(buffer,SIZE,fp1)!

=NULL)

printf("%s\n",buffer);

while(fgets(buffer,SIZE,fp2)!

=NULL)

fputs(buffer,fp1);

fclose(fp1);

fclose(fp2);

//重新打开a.txt,验证是否附加成功

if((fp1=fopen("a.txt","r"))==NULL)

{

printf("Thefile%scannotbeopened.\n","a.txt");

return;

}

while(fgets(buffer,SIZE,fp1)!

=NULL)

printf("%s\n",buffer);

fclose(fp1);

}

*****************************************************************************

往文件中写格式化数据fprintf

*****************************************************************************

函数原型

intfprintf(FILE*fp,char*format,arg_list)

2.功能说明

  将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。

fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。

3.参数说明

  fp:

这是个文件指针,指出要将数据写入的文件。

  format:

这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。

格式串描述的规则与printf()函数中的格式串相同。

arg_list:

是要写入文件的变量表列,各变量之间用逗号分隔。

4.返回值

  输出的字节个数

例:

向文件写数据。

程序执行后,在windows中打开,验证结果是否正确。

文件a.txt占15字节。

因为前3行的结尾都有\n\r

#include

voidmain(){

intch;

FILE*fp;//定义文件类型指针

if((fp=fopen("a.txt","w"))==NULL)

{

printf("Thefilecannotbeopened.\n");//打开操作不成功

return;//结束程序的执行

}

fprintf(fp,"%d\n%d\n%d\n%s",2,3,50,"china");

fclose(fp);//关闭fp所指文件

}

在Windows中用记事本打开文件a.txt,其内容是

2

3

50

china

*****************************************************************************

从文件读格式化数据fscanf

*****************************************************************************

函数原型

intfscanf(FILE*fp,char*format,arg_list)

2.功能说明

  从fp代表的文件中按照format指定的格式读入数据,放到变量表列(arg_list)中。

fscanf()函数与scanf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。

3.参数说明

  略

4.返回值

  读入的数据个数

#include

voidmain(){

inta,b,c;

chars[100];

FILE*fp;//定义文件类型指针

if((fp=fopen("a.txt","r"))==NULL)

{

printf("Thefilecannotbeopened.\n");//打开操作不成功

return;//结束程序的执行

}

fscanf(fp,"%d%d%d%s",&a,&b,&c,s);

printf("a=%d,b=%d,c=%d,sis%s",a,b,c,s);

fclose(fp);//关闭fp所指文件

}

如果是上例的a.txt,那么运行结果是

a=2,b=3,c=50,sischina

*****************************************************************************

以二进制形式读取文件中的数据fread

*****************************************************************************

1.函数原型

intfread(void*buffer,unsignedsife,unsignedcount,FILE*fp)

2.功能说明

  从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中。

3.参数说明

buffer:

这是一个void型指针,指出要将读入数据存放在其中的存储区首地址。

sife:

指出一个数据块的字节数,即一个数据块的大小尺寸。

count:

指出一次读入多少个数据块(sife)。

fp:

这是个文件指针,指出要从其中读出数据的文件。

4.返回值

  正常返回:

实际读取数据块的个数,即count。

  异常返回:

如果文件中剩下的数据块个数少于参数中count指出的个数,或者发生了错误,返回0值。

此时可以用feof()和ferror()来判定到底出现了什么

情况。

*****************************************************************************

以二进制形式写数据到文件中去fwrite

*****************************************************************************

以二进制形式写数据到文件中去

1.函数原型

intfwrite(void*buffer,unsignedsife,unsignedcount,FILE*fp)

2.功能说明

  按二进制形式,将由buffer指定的数据缓冲区内的sife*count个数据写入由fp指定的文件中去。

3.参数说明

buffer:

这是一个void型指针,指出要将其中数据输出到文件的缓冲区首地址。

sife:

指出一个数据块的字节数,即一个数据块的大小尺寸。

count:

一次输出多少个数据块(sife)。

fp:

这是个文件指针,指出要从其中读出数据的文件。

4.返回值

  正常返回:

实际输出数据块的个数,即count。

  异常返回:

返回0值,表示输出结束或发生了错误。

例子:

将数组a中的5个整数写入到文件a.dat中。

用记事本打开,发现是乱码。

该文件占据20字节。

#include

voidmain(){

inta[5]={10,11,12,13,14};

FILE*fp;

fp=fopen("a.dat","wb");

fwrite(a,sizeof(int),5,fp);

fclose(fp);

}

例子:

将上面的a.dat中的20字节读进来,放在数组a中,用循环显示5个整数

#include

voidmain(){

inti,a[5];

FILE*fp;

fp=fopen("a.dat","rb");

fread(a,sizeof(int),5,fp);

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

printf("%d\n",a[i]);

fclose(fp);

}

运行结果:

10

11

12

13

14

例子:

#include

#defineSIZE4

structworker

{intnumber;

charname[20];

intage;

};

voidmain()

{

structworkerwk;

intn;

FILE*in,*out;

if((in=fopen("file1.txt","rb"))==NULL)

{

printf("Thefile%scannotbeopened.\n","file1.txt");

return;

}

if((out=fopen("file2.txt","wb"))==NULL)

{

printf("Thefile%scannotbeopened.\n","file2.txt");

return;

}

while(fread(&wk,sizeof(structworker),1,in)==1)

fwrite(&wk,sizeof(structworker),1,out);

fclose(in);

fclose(out);

}

*****************************************************************************

判断文件是否结束feof()

*****************************************************************************

文件结束

(1)函数原型

intfeof(FILE*fp)

(2)功能说明

   该函数用来判断文件是否结束。

(3)参数说明

   fp:

文件指针。

(4)返回值

   0:

假值,表示文件未结束。

   1:

真值,表示文件结束。

*******************************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1