文件的简单操作

文件概述:
文件是指存储在外部介质(如磁盘磁带)上的数据的集合。
操作系统是以文件为单位对数据进行管理的。

1.内存与文件的联系:

其中,程序数据区就是指内存。

2.文件的分类:
我们按数据的组织形式可以把文件分为两类,一类是ASCII型文件(文本文件),一类是二进制式文件。
我们知道,数据在内存中就是以二进制形式存储,二进制文件其实就是原封不动的把数据输出到文件中,而ASCII文件则经过了一些转换,具体区别如下例子:

把数据转换为 ASCII文件,需要把每一个字符都转换为ASCII码存储。
两者的优缺点一眼便知,不多赘述。

FILE函数:
c语言中定义了FILE函数方便我们对文件进行操作,FILE是typedef下的定义,它是一个结构体类型,FILE结构体内封装了很多成员,此处列出它的原型作为了解,但在实际编写代码中,FILE是已经被系统定义好的,可以直接使用。

typedef struct{
    short level;   /*缓冲区“满”或“空”的程度*/
    unsigned flags; /*文件状态标志*/
    char fd;        /*文件描述符*/
    unsigned char hold; /*如无缓冲区不读取字符*/
    short bsize;       /*缓冲区的大小*/
    unsigned char *buffer;/*数据缓冲区的位置*/
    unsigned char *curp;/*指针,当前的指向*/
    unsigned istemp;/*临时文件,指示器*/
   short token;/*用于有效性检查*/
}FILE;

就像调用其它结构体一样,调用FILE,系统就会在内存中开辟出一块FILE类型文件缓冲区,用于存放文件的有关信息。

下面举两个例子:

FILE F[5];//FILE型数组,该数组可以存放5个文件。
FILE *fp;//FILE型指针,fp指向一个文件。

文件的打开与关闭:
对【打开】的理解:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

【注意】这里要说明一点,c语言将计算机的所有硬件设备也看作是文件,比如屏幕文件,键盘文件等;ANSIC标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。
标准输入流是从终端的输入;
标准输出流是向终端的输出;
标准出错输出流是当程序出错时将出错信息发送到终端;

文件打开函数:fopen(文件名,使用文件方式)

FILE *p;
p=fopen("txt1","w");//p指向 txt1 这个文件;

返回值:打开成功返回指向该文件的指针,打开失败返回空指针;

常用使用文件方式:

r,w,a的区别:
用r方式打开文件:这个文件一定要预先就存在,否则提示出错;
用w方式打开文件:这个文件可以不存在。如果存在该文件,清空文件内容;如果不存在,建立一个新文件;
用a方式打开文件:综合r与w的功能,并且写入数据时数据会写入在文件末端,即追加;但用a方式应满足该文件预先存在,否则提示出错;

【注意】
计算机从ASCII文件读入字符时,遇到回车换行符,系统把它转换为一个换行符,在输出时把换行符转换成为回车和换行两个字符。在用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对应。

文件关闭函数:fclose(文件指针)
返回值:关闭成功返回0;否则返回EOF;
注意文件的打开与关闭是相伴随的,文件打开而没有及时关闭就会可能导致文件数据丢失;

文件相关操作函数:

1.字符级读写函数

fgetc(文件指针)
作用:从文件光标位置处读取一个字符;
返回值:读取成功返回该字符,读取失败返回EOF,另外读取到文件结尾处也会返回EOF;

fputc(字符,文件指针)
作用:把字符写入文件中,写入位置为文件光标所在位置;
返回值:写入成功,返回写入字符的ASCII码,否则返回0;

2.字符串级读写函数

fgets(指向字符串的指针,字符个数n,文件指针)
作用:从文件中读取一个字符串并保存内存中;
其中,指向字符串的指针指向字符数组,用来存储读入的字符串;字符个数n表示最多可以读入n-1个字符,因为字符串还需要一个结束标志’\0’;

fgets读取结束标志:
(1)读够了n-1个字符,读取结束;
(2)未读够n-1个字符,但读取遇到了换行符,读入换行符,结束读取;
(3)未读够n-1个字符,但读取遇到了文件结束标志EOF,读取结束;
返回值:未读取到文件结尾时,返回读入的字符串的首地址;如果读取到了文件结尾,返回NULL;

fputs(字符串,文件指针)
作用:把字符串写入文件中;
返回值:写入成功返回0;否则返回非0;

3.常规数据文件输入输出函数

fscanf(文件指针,“格式控制列表”,地址列表) //注意格式控制列表需要加双引号
作用:正读,即把文件内容写入到内存中;
返回值:正常读取返回读取数据的个数,否则返回EOF;

fprintf(文件指针,“格式控制列表”,地址列表)
作用:倒读,即把内存中数据写入到文件中;
返回值:读取成功返回写入的字符数,否则返回负值;

4.块级读写函数

fwrite(数据块指针,数据块大小,数据块个数,文件指针)
作用:正读;
返回值:写入成功返回写入的数据块的个数,否则返回0;

fread(数据块指针,数据块大小,数据块个数,文件指针)
作用:倒读;
返回值:如果未读取到文件结尾,返回读取数据块的个数,读取到文件结尾,返回NULL;

5.文件定位函数

rewind(文件指针)
作用:使文件内置指针移动到文件的开头;

ftell(文件指针)
作用:获取文件内置指针的当前值;

fseek(文件指针,偏移量,起始位置)
作用:使文件内置指针按照我们的要求自由移动;
其中,起始位置有 0,1,2 三个位置可选,0表示从文件头位置开始,1表示从当前文件内置指针位置开始,2表示从文件结束位置开始;偏移量带正负号,分别表示向后移动还是向前移动;每次偏移的大小可以用sizeof函数获取数据文件大小,也可以自己设置;

feof(文件指针)
作用:用于检测该文件内置指针是否指向文件结束位置;
返回值:如果检测是,返回1;否则返回0;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值