C语言文件输入输出篇 CSDN花神生涯


文件的概念

  • 文件指的是一组相关数据的有序集合
  • 文件是驻留在外部介质上的,在使用时才调用内存

文件的分类

分类一

  • 程序文件:包括源程序文件(后缀.c),目标文件(windows后缀名.obj),可执行程序(windows后缀名.exe)
  • 数据文件:程序运行时读写的数据,

分类2,从用户的角度分类

  • 普通文件
  • 设备文件:与主机相联的各种外部设备

分类3,从文件编码的方式来看

  • ASCII文件 :以ASCLL字符的形式存储也称文本文件,按字符显示,因此能读懂
  • 二进制文件:文件在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件

文件名

  • 一个文件要有一个唯一的文件标识
  • 文件名包含三部分:文件路径+文件名主干+文件后缀

文件缓冲区

  • ANSIC标准采用“缓冲文件系统”处理的数据文件
  • “缓冲文件系统”就是系统自动的在内存中每一各正在使用的文件开辟一块“文件缓冲区”
  • 内存向磁盘输出数据,先经过内存中的缓冲区,装满后一起送到磁盘上
  • 磁盘向计算机读入数据,则从磁盘文件中读取数据先输入到内存缓冲区,充满后,再将数据送到程序数据区
  • 缓冲区的大小根据c编译系统决定

文件指针 FILE * pf

  • C语言用一个指针变量指向一个文件,对文件进行操作
  • 用来存放文件的相关信息(文件的名字,文件状态,文件位置),保存在结构体变量中,该结构体类型是有系统声明的,取名FILE
  • FILE必须大写
FILE *fp;
//文件指针变量
//将fp笼统的称为指向文件的指针,其实是表示为指向FILE结构体的指针变量
//通过fp即可找存放某个文件信息的结构体变量

文件的打开fopen

  • 格式: 文件指针名 =fopen(文件名,文件打开方式);
  • 文件指针名必须时被说明为FILE类型的指针变量
  • “文件名”是被打开文件的文件名,,文件名必须是字符串常量或字符数组
  • “文件使用方式”是指文件的类型和操作要求
  • 每当打开一个文件的时候,系统会根据文件自动创建一个FILE结构的变量,并填充其中信息
  • 有绝对路径和相对路经
  • 标准输入文件(键盘stdin),标准输出文件(显示器stdout),标准出错输出(出错信息)是由系统打开的,可直接使用
FILE *fp=fopen(test.txt,"r");
//当文件不存在时fopen将会创建这个文件

r:打开一个文本文件只读
w:打开一个文本文件只写 ,不存在则指定建立,存在则覆盖
a:对一个文本文件添加
rb:打开一个二进制文件只读
wb:打开一个二进制文件只写
ab:对一个二进制文件添加
r+:打开一个文本文件读/写
w+:生成一个文本文件读/写
a+:打开一个文本文件读/写 ,只有’a’可以向一个已存在的文件追加信息
rb+:打开二进制文件读/写
wb+:生成二进制文件读/写
ab+:打开二进制文件读/写

文件的关闭fclose

  1. 正常关闭文件时,fclose函数的返回值为0,若非0,表示出错
  2. 格式: fclose(文件指针); n

fclose(fp);//关闭文件

文件的顺序读写

  • 必须先行创建#include <studio.h>

  • 字符读写函数:fgetc和fputs//每次可从文件读出或向文件写入一个字符
    格式: 字符变量=fgetc(文件指针);
    格式: 字符变量=fgetc(字符量,文件指针);

  • 字符串读写函数:fgets和fputs//从指定的文件中读入一个字符串到字符数组
    格式: fgets(字符数组名,n,文件指针);
    格式: fputs(“字符串”,文件指针);

  • 数据块读写函数:freed和fwrite

int main()
{
	FILE *pf=fopen(test.txt,"r");
	if(pf==NULL)
{
		printf("%s\n",strerror(errno));//检查打开文件是否为出错
		return 0;
}
//字符写入
	fputc('b',pf);
	fputc('c',pf);
	fputc('d',pf);
//字符读出,然后输出到屏幕上
	printf("%s",fgetc(pf);)//b//每次使用fgets函数后,(文件的内部位置指针系统自动设置)该位置指针向后移动一个字符,因此,实现读取多个字符
	printf("%s",fgetc(pf);)//c
	printf("%s",fgetc(pf);)//d
//字符串的读入
	char shuzu[1024]={0};//创建字符数组
	//键盘输入,显示器输出
	fgets(shuzu,1024,stdin);//从键盘读取(标准输入流读取)
	fputs(shuzu,stdout);//输出到标准输出流
	fgets(shuzu,1024,pf);//把pf字符串读取到shuzu,文本行输出函数
		printf("%s",shuzu);
		puts(shuzu)//读取一行打印在显示器上,puts函数天生会换行
//字符串的写入
	fputs("hello\n",pf);//写一行,文本行输入函数
	fputs("world\n",pf);

格式化函数

struct S
{
	int n;
	float score;
	char arr[10];
};
int main()
{
	struct S s={100,3.14f,"bit"}
	FILE *pf=fopen(test.txt,"r");
	if(pf==NULL)
	{
		printf("%s\n",strerror(errno));
		return 0;
	}
//针对所有输入流/标准输出流的格式化输入/输出语句
//格式化函数的读写对象不是键盘和显示器,而是磁盘文件
	//格式化输入
	fscanf(pf,"%s,%f,%s",&(s.n),&(s.score),s.arr);
	//格式化输出	
	fprintf(pf,"%s,%f,%s",s.n,s.score,s.arr);
	//键盘输入,显示器输出
	fscanf(stdin,"%s,%f,%s",&(s.n),&(s.score),s.arr);
	fprintf(stdout,"%s,%f,%s",s.n,s.score,s.arr);
//针对标准输入流/标准输出流的格式化输入/输出语句
	printf("%s,%f,%s",s.n,s.score,s.arr);
	scanf("%s,%f,%s",&(s.n),&(s.score),s.arr);
//关闭文件
	flose(pf);
	pf=NULL;
	return 0;
}

文件结束检测函数feof

调用格式:
feof(文件指针)//判断文件是否处于文件结束位置,若文件结束,返回值为1,否则返回值为0

文件的随机读写

  • 实现随机读写的关键,是按要求移动位置指针,者称为文件的定位
rewind(FILE*fp);//用来将位置指针移动到文件开头,q
SEEK_SET  表示文件指针的开头
SEEK_CUR  表示文件指针的当前位置
SEEK_END  表示文件指针的末尾
fseek(指针,偏移量,文件指针的当期位置)//定位文件指针,用来将位置指针移动到任意位置
ftell(pf)//返回文件指针相对于起始位置的偏移量
ferror(文件指针);//目的检测调用各种输入输出函数进行读写时是否出错,函数初始值为0,出现错误,则非0值
clearerr(文件指针)//文件出错标志和文件结束标志,清除出错标志,使非任溶溶函数产生的非0值重新变为0
fclose(in);
fclose(out);
fcloseall();//用于关闭所有已经打开的文件

二进制文件的随机读写

fread()
fwrite()

花神博客生涯之C语言(文件的输入输出篇)结束了哦~
接下来会持续更新(⊙o⊙)!
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值