C语言——对文件的输入输出

1 什么是文件?
1.1 程序文件。包括源文件(后缀为.c),目标文件(后缀为.obj),可执行文件(后缀为.exe)等。这种文件的内容是程序代码

1.2 数据文件。文件的内容不是程序,而是供程序运行时读写的数据

文件是程序设计中的一个重要的概念,所谓"文件"一般指存储在外部介质上数据的集合

输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流,即数据流。流表示了信息从源到目的端的流动

2 文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。文件标识包括3个部分:<1>文件路径<2>文件名主干<3>文件后缀

文件路径表示文件在外部存储设备中的位置。如:D:\cc\temp\filel.dat
为了方便起见,文件标识常被称为文件名

3 文件的分类
根据数据的组织形式,数据文件可分为ASCII文件(文本文件)和二进制文件(映像文件)

4 文件缓冲区
ANSI C 标准采用"缓冲文件系统"处理数据,所谓缓冲数据系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区
注:
每一个文件在内存中只有一个缓冲区,在向文件输出数据时,它就作为输出缓冲区,在从文件输入输出时,它就作为输入缓冲区

5 文件类型指针
缓冲文件系统中,关键的概念是"文件类型指针",简称"文件指针"。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE。

通过文件的指针变量能够找到与它关联的文件
通常将这种指向文件信息区的指针变量简称为指向文件的指针变量
注:
指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中文件信息区的开头

6 打开与关闭文件
6.1 用fopen函数打开数据文件
fopen函数的调用方式为: fopen(文件名,使用文件方式); 例如:fopen(“al”,“r”);表示要打开名字为al的文件,使用方式为"读入"

6.2 用fclose函数关闭数据文件
fclose函数调用的一般形式为:fclose(文件指针);
在这里插入图片描述

7 顺序读写数据文件
7.1 用fgetc函数读入字符
fgetc函数的调用方式为:fgetc(文件指针);
功能:从文件指针指向的文件读入一个字符
读成功,带回所读的字符,失败则返回文件结束标志EOF

7.2 用fputc函数输出字符
fputc函数的调用方式为:fputc(字符数组名 字符型指针变量或字符串常量,文件指针); 如:fputc(ch,fp);该函数的功能是将字符串ch写入由fp指向的文件中,字符串末尾的‘\0’字符不允写入。
输出成功,返回值就是输出的字符;输出失败,则返回EOF

7.3 怎样向文件读写一个字符串
C语言允许通过函数fgets和fputs一次读写一个字符串,例如:
fgets(str,n,fp); 作用是从fp所指向的文件中读入一个长度为n-1的字符串,并在最后加一个’\0’字符,然后把这n个字符存放到字符数组str中,读成功返回地址str,失败则返回NULL

8 用格式化的方式读写文本文件
它们的一般调用方式为:
fprintf(文件指针,格式字符串,输出表列);
fprintf()用来将输出项按指定的格式写入指定的文本文件中,其中格式化规定与printf()函数功能相似,所不同的只是fprintf()函数是将输出的内容写入文件中,而printf()函数则是在屏幕输出。

fscanf(文件指针,格式字符串,输入表列);
fscanf()用来按规定的格式从指定的文本文件中读取数据。它与scanf()函数的功能相似,都是按规定的格式读数据的函数,只是fscanf()函数读的对象不是键盘区,而是文件。

9 用二进制方式向文件读写一组数据
它们的一般形式为:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:它是用来存放从文件读入的数据的存储区的地址
size:要读写的字节数
count:要读写多少个数据项(每个数据项长度为size)
fp:FILE类型指针

在打开文件时指定用二进制文件,这样就可以用fread和fwrite函数读写任何类型的信息,例如:
fread(f,4,10,fp); 这个函数从fp所指向的文件读入10个4个字节的数据,存储到数组f中
注:
fread或fwrite函数的类型为int型,如果fread或fwrite函数执行成功,则函数返回值为形参count的值(一个整数),即输入或输出数据项的个数(今为1)

10 随机读写数据文件
用rewind函数使文件位置标记指向文件开头
作用:使文件位置标记重新返回文件的开头,此函数没有返回值

用fseek函数改变文件位置标记
调用形式为:
fseek(文件类型指针,位移量,起始点); 如:fseek(fp,100L,0);将文件位置标记向前移到离文件开头100个字节处
起始点用0,1或2代替,0代表"文件开始位置",1为"当前位置",2为"文件末尾位置"
位移量指以"起始点"为基点,向前移动的字节数。位移量应是long型数据(在数字的末尾加一个字母L,就表示是long型)

用ftell函数测定文件位置标记的当前位置
作用是得到流式文件中文件位置标记的当前位置,如果调用函数时出错,ftell函数返回值为-1L
例如:i=ftell(fp); //变量i存放文件当前的位置

11 文件读写的出错检测
11.1 ferror函数
在调用各种输入输出函数式如果出现了错误,除了函数返回值有所反映外,还可以用ferror函数检查。它的一般调用形式为:ferror(fp);
如果ferror返回值为0(假),表示未出错;如果返回一个非零值,表示出错
注:
对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢。在执行fopen函数时,ferror函数的初始值自动置为0

11.2 clearerr函数
作用:是使文件出错标志和文件结束标志置为0.假设在调用一个输入输出函数时出现错误,ferror函数值为一个非零值。应立即调用clearerr(fp);使ferror(fp);的值变为0,以便再进行下一次的检测

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值