C语言-文件

一、文件概述

什么是文件?磁盘上的文件是文件
在程序设计中,我们一般谈的文件有两种:程序文件、数据文件

文件名:
一个文件要有一个唯一的文件标识,以便用户识别和引用
文件名包含3部分:文件路径+文件名主干+文件后缀

文件类型:根据数据的组织形式,数据文件被称为文本文件或者二进制文件
–数据在内存中以二进制形式存储,如果不加以转换的输出导外存,就是二进制文件
–ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符。

  C语言中当打开一个文件时,执行程序会自动打开三个标准文件—标准输入文件、标准输出文件和标准错误文件以及与这三个文件相连的三种流—标准输入流、标准输出流和标准错误流。

二、文件类型指针

   要读写一个文件,必须知道与该文件有关的信息(如文件名,文件状态,文件当前的读写位置,文件缓冲区的大小与位置等等)这些信息被系统保存在一个结构体中,这个结构体中的信息组成了文件类型。系统为该结构类型起了个专用的名字:FILE。
  FILE类型的结构和操作系统有关,也就是说该结构的成员随系统对文件处理的方式的不同而不同。

  struct  file
        {
             int level;             	     /*缓冲区被占用的程度*/
    	     unsigned flags;               /*文件状态标记*/
             char  fd;                       /*文件描述符*/
             unsigned char hold;     /*如无缓冲区,则不读取字符*/
             int  bsize;                         /*缓冲区大小*/
	    	 unsigned char  *buffer;  /*文件缓冲区指针*/
	    	 unsigned char *curp;    /*文件定位指针*/
	    	 unsigned  istemp;           / *暂时文件指示器*/
	    	 short    token;                 / *用于有效性检查*/
         };

文件在使用前需要打开文件,结束后应该关闭文件
ANSIC规定使用fopen打开文件,fclose关闭文件
   如果打开的是二进制文件,则增加一个字符b(binary)。其他字符的含义为:r代表read,用于读;w代表write,用于写;a代表append,用于追加
在这里插入图片描述(1)凡是打开方式字符串中含有字符“r”的,所打开的文件必须是已存在的文件,对不存在的文件不能打开读。
(2)凡是打开方式中带有“w”字符的,所打开的文件可以是已经存在的,也可以是尚不存在的。若不存在时,则先要建立一个新文件,然后在里面写内容;若文件已经存在,则会把原文件的内容覆盖掉,写入新的内容。
(3)凡含有字符“a”,以追加方式打开的文件也可以不存在,若不存在则建立一个新文件后再追加;若已存在,则在文件的尾部追加。
(4)以“r+”和“w+”方式打开的文件都是既可用于读,又可用于写的。其差别是,以“w+”方式打开的是一个新文件,应先写入内容,然后可以读。
(5)在打开文件的操作中有可能出现故障,如当文件所在的磁盘未准备好时,不能把文件打开,这时打开文件函数fopen就返回NULL值。
(6)有三个和标准输入/输出流对应的设备文件不需用户打开,在执行程序时,系统自动将它们打开。这三个文件是标准输入文件、标准输出文件和标准出错文件,指向它们的文件指针分别是stdin、stdout和stderr。

三、文件是输入输出

1. 文件的字符输入/输出函数fgetc和fputc

(1) fgetc函数
fgetc函数的调用格式为:
<字符变量> = fgetc(<文件指针>)
功能:从<文件指针>所指的文件中读入一个字符赋给<字符变量>。
(2) fputc函数
设 ch 为字符类型,则其调用格式为:
fputc( ch ,<文件指针>)
功能:把字符ch(变量或常量)放入<文件指针>所指的文件中。如果操作失败,则返回EOF。EOF是在stdio.h文件中定义的符号常量,值为-1。

2. 文件的字符串输入/输出函数fgets()和fputs()

(1) fgets()函数
fgets 函数的调用格式为:
fgets(str,n,fp)
其中,str 为指定的字符数组;n为包括’\0’字符在内的字符个数;fp 为文件指针。
功能:从fp所指文件中读取n-1个字符(留一个字符给’\0’),并把它们放入str字符数组中。当满足下列条件之一时,读取结束:
• 已经读取了n-1个字符;
• 当前读到的字符为回车符;
• 已读到文件的末尾。
(2) fputs函数
fputs函数的调用格式为:
fputs( str,fp )
其中,fp为文件指针,str为一字符串,它可以是指向字符串的指针,也可以是字符数组名,还可以是字符串常量。
功能:把指定字符串放到指定的文件中。fputs函数在将字符串写入文件时,把字符串后的’\0’字符自动舍去。
fputs(str, stdout)≠puts(str)
因为puts()函数是把字符串尾部的’\0’字符变成回车符输出,而fputs函数则是舍去字符串末尾的’\0’字符。
fputs函数若输出成功,返回值为0;若输出失败, 返回值为 EOF (即-1)。

3. 文件数据块的输入/输出函数fread和fwrite

(1) fread函数
fread函数调用的一般格式为:
fread(buf , size , count , fp);
其中buf是一个指针,指向输入数据在内存中的起始地址;size为要读取的字节个数;count为要读取多少个size字节的数据项;fp为指向由fopen打开的文件的指针。
功能:从fp指定的文件中读取sizecount个字节的数据,并把它放入由buf指定的内存中。
(2) fwrite函数
fwrite函数调用的格式为:
fwrite(buf,size,count,fp);
其中,参数的个数和类型与 fread 函数完全一样,只是它进行相反的操作。这里的 buf 是输出数据在内存中存放的地址。
功能:把buf中大小为size
count个字节的数据写入fp指定的文件中。如语句:
fwrite( ibuf , 2 , 5 , fp);
是把整型数组中的5个整数写入fp指定的文件中。
返回值:若输出成功,则返回写入文件中的数据项数;若输出失败,则返回-1。

4. 文件的格式化输入/输出函数fscanf和fprintf

fscanf(<文件指针>,<格式控制串>,<输入列表>)
fprintf(<文件指针>,<格式控制串>,<输出列表>)
功能与 scanf函数和 printf函数几乎一样,差别只在于它们可以对任何文件进行输入/输出,而scanf和 printf 只对终端设备进行,如:
fscanf(fp,"%d%f",&i,&x);
 表示从fp所指文件中读入一个整数给i,一个浮点数给x(这样做必须先要知道磁盘上的数据是如何存储的)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王不叫小王叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值