【C语言】对文件的输入与输出

什么是文件?

程序文件:源程序文件(.c),目标文件(.obj),可执行文件(.exe),这种程序文件的内容是代码。

数据文件:供程序运行时读写的数据。(主要讲数据文件)

所谓的“文件”是存储在外部介质上的数据的集合,操作系统是以文件为单位对数据进行管理的。

要向外部介质上存储数据也必须建立一个文件(以文件名作为标志),才能向它输出数据。

1.文件名

一个文件的唯一标识。包括(1)文件路径 (2)文件名主干(标识符命名规则一样)(3)文件后缀

在这里插入图片描述

2.文件的分类

从操作系统看,每一个与主机相连的输入输出设备看做是一个文件:

例:输入文件:终端键盘 输出文件:显示屏和打印机

按数据的组织形式:

ASCII文件(文本文件)

二进制文件(映像文件)

例如:整数10000

在这里插入图片描述

3.文件缓冲区

系统自动的在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区

从内存向磁盘输出的数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。

每个文件只有一个缓冲区。输出时作为输出缓冲区,输入时作为输入缓冲区

在这里插入图片描述

4.文件类型指针

缓冲文件系统中,每个被使用的文件都会开辟一个文件信息区(包括文件的名字,状态当前位置等等),这些信息保存在一个结构体变量中,通过文件的指针变量能够找到与它关联的文件

该结构体是由系统声明的,取名为FILE,C编译环境<stdio.h>头文件中包含文件类型声明

FILE * fp; //定义一个指向文件型数据的指针变量
//指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中的文件信息区的开头。

5.打开与关闭文件

对文件读写之前应该先打开“文件”(建立文件信息区和缓冲区),在使用结束后应该关闭“文件”。

5.1用fopen函数打开数据文件
//格式:fopen(文件名,使用文件的方式);
FILE * fp; //定义一个指向文件的指针变量
fp = fopen("al","r"); //将fopen函数的返回值赋给指针变量fp,这样fp和a1文件有联系了,fp指向了a1文件

打开一个文件,需要三个信息:①文件名字;②使用文件的方式;③需要指向文件的指针变量;

在这里插入图片描述

以上以计算机为角度,向文件读取,写入

注:二进制无换行,文本文件有换行(ASCII值)

5.2用fclose函数关闭数据文件
//格式:fclose(文件指针);
fclose(fp); //使文件指针变量不再指向该文件,有返回值,如果返回值为0,成功关闭,返回值为EOF(-1),关闭失败

6.顺序读写文件

顺序写入时,先写入的数据存放在文件中前面的位置,后写入的数据存放在文件中后面的位置。

顺序读时,先读文件中前面的数据,后读文件中后面的数据。

6.1怎样向文件读写字符

对文本文件读入或输出一个字符

6.2怎样向文件读写一个字符串

6.3用格式化的方式读写文本文件
//格式:fprintf(文件指针,格式字符串,输出列表);
//格式:fscanf(文件指针,格式字符串,输入列表);
fprintf(fp,"%d",32);//输出32到文件磁盘上

和 printf() 和 scanf() 的区别是:读写的对象不同

printf() 和 scanf() 读写的对象是终端

fprintf() 和 fscanf() 读写的对象是文件

6.4用二进制的方式向文件进行读写一组数据
//格式:fread(buffer,size,count,fp);
//格式:fwrite(buffer,size,count,fp);
//buffer:地址,
//对于fread来说,它是用来存放文件读入的数据的存储区的地址
//对于fwrite来说,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)
//size:要读写的字节数
//count:要读写多少个数据项
//fp:FILE类型指针

7.随机读写数据文件

不是按照数据在文件中的物理位置次序进行读写的,而是可以对任何位置上的数据进行访问,显然这种方法比顺序访问的方法效率高的多。

7.1文件位置标记及其定位

(1)位置标记

(2)位置标记的定位

rewind() 函数使文件位置标记指向文件头,此函数没有返回值

rewind(fp1); //使文件位置标记返回文件开头

fseek() 函数改变文件位置标记

格式:fseek(文件类型指针,位移量,起始点);

fseek(fp,100L,0);//将文件位置标记从文件开头前移100个字节处
fseek(fp,50L,1);//将文件位置标记向前移到离当前位置50字节处
fseek(fp,-50L,2);//将文件位置标记从文件末尾后退50个字节处
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值