什么是文件操作?为什么要有文件操作?


前言

文件,我们学习C最后都要与实体进行交互,面向端往往取决于需求,而之前好像一直在写一些仅仅给自己看的小逻辑,并没有完全可以保存下来,比如保存成电脑中文件的样子的文件。
本章主要介绍如何去与自己的计算机进行交互,前几天发布的通讯录并没有记忆功能,每次运行都需要重新输入数据,然后去进行删除、显示、查看等等的操作,本章介绍的就是如果将这些内容保存到自己的电脑中,创建出一个文件

一、什么是文件

  • 一般在程序中我们将文件分为两种:程序文件、数据文件。

1.1 程序文件

  • 源程序文件,后缀为.c

打开可以直接进入编译器
在这里插入图片描述

  • 目标文件,在windows上后缀为.obj

这是在我们windows下的文件
在这里插入图片描述

  • 可执行程序,windows下后缀为exe

在这里插入图片描述

1.2 数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件

这也是本文主要探讨的文件。

二、文件的打开与关闭

2.1 文件指针

一般这种都是在库函数中有声明的,在我所用的vs2013版本里声明在 #include<stdio.h>
一般这类结构体变量都取名为 FILE

2.2 文件的打开与关闭

文件在读写之前先需要打开文件,用完之后要手动关闭文件
例:

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
//打开文件与关闭文件必须成对出现
int fclose ( FILE * stream );

2.3 文件读写详情表!(重点)

文件使用方式含义如果指定文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新的文件
“a”(追加)向文本文件尾添加数据建立一个新的文件
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新的文件
“ab”(追加)向一个二进制文件尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建立一个新的文件建立一个新的文件
“a+”(读写)打开一个文件,在文件尾进行读写建立一个新的文件
“rb+”(读写)为了读和写,打开一个二进制文件出错
“wb+”(读写)为了读和写,新建了一个新的二进制文件建立一个新的文件
“ab+”(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

新建文件演示

//引用库函数
#include<stdio.h>
int main()
{
	FILE* pfw;
	//建立一个新的文件,之前并不存在的文件
	pfw=fopen("text.txt","w");
	//查看是否开辟成功
	if(pfw==NULL{
		perror("fopen example::text.txt");
		teturn;
	}
	//关闭文件
	fclose(pfw);
	return 0;
}

2.4 文件的顺序读写!(重点)

功能函数名适用于
字符输入函数fgets所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

选择自己所需要的输出输入格式
实机演示

//之前的通讯录中实现信息的存储
void loadContact(struct Contact* pc)
{
	//查pc
	assert(pc);
	//开辟文件,并准备写入数据
	FILE* pfw = fopen("data.txt", "rb");
	if (pfw == NULL)
	{
		perror("Contact.loadContact::fopen");
		return;
	}
	int i = 0;
	//依次写入通讯录中每组数据
	for (i = 0; i <= pc->sz; i++)
	{
		fread(pc->data + i, sizeof(struct strtact), i, pfw);
	}
	//关闭文件
	fclose(pfw);
	pfw = NULL;
}

2.5 文件的随机读写

2.5.1 fseek

根据文件指针的位置和偏移量来定位文件指针
fseek

int fseek ( FILE * stream, long int offset, int origin );

**

int main ()
{
  FILE * pfw;
  pfw = fopen ( "text.txt" , "wb" );
  fputs ( "This is an apple." , pfw );
  fseek ( pfw , 3 , SEEK_SET );
  fputs ( " sam" , pfw );
  fclose ( pfw );
  return 0;
}

2.5.2 ftell

指定读取文件指针时相对于起始位置的偏移量

long int ftell(FILE* stream);

#include <stdio.h>
int main ()
{
  FILE * pFile;
  long size;
  //打开文件
  pFile = fopen ("myfile.txt","rb");
  if (pFile==NULL)
  perror ("Error opening file");
  else
 {
 	//读取文件
    fseek (pFile, 0, SEEK_END);
    size=ftell (pFile);
    //关闭文件
    fclose (pFile);
    printf ("Size of myfile.txt: %ld bytes.\n",size);
 }
  return 0;
}

2.6 文本文件与二进制文件

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
一个数据在内存中是怎么存储的呢?
字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。

存入的文本文件
在这里插入图片描述

观山海.
关注 关注
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
写文章

热门文章

  • 快排(动图详细版,快速理解) 4737
  • 动态内存开辟(malloc、free等函数)及常见的动态内存错误。 1226
  • C语言常用函数详解(持续更新中) 1153
  • Linux下gdb基础命令演示,及命令汇总图 931
  • 位图、布隆过滤器、海量数据处理 897

分类专栏

  • 山海100天刷题计划

最新评论

  • 快排(动图详细版,快速理解)

    qq_43499814: 你说得对

  • 快排(动图详细版,快速理解)

    星河栀染: 挖坑法代码,是不是有一处写错了,找到左侧大于基准值的,不应该是往右坑位填入v[hole]=v[left],key不应该是基准值吗

  • 快排(动图详细版,快速理解)

    观山海.: 是的,不过只是萌新一枚

  • 快排(动图详细版,快速理解)

    木子斤欠木同: 是不是比特的师兄

  • 位图、布隆过滤器、海量数据处理

    一朵猫猫菇: 位图表情包

最新文章

  • 类,这一篇文章你就懂了!
  • 什么是多态
  • 什么是继承
2023年15篇
2022年10篇

目录

目录

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家长沙商场开业美陈玻璃钢雕塑表面效果玻璃钢雕塑厂服务为先北京通道商场美陈销售企业苏州商场春节美陈湖南不锈钢人物校园玻璃钢雕塑陆川玻璃钢雕塑夜叉雕塑图片玻璃钢佛像嘉兴抽象玻璃钢雕塑订做价格安徽景区玻璃钢雕塑定制南阳铸铜玻璃钢雕塑张掖动物玻璃钢雕塑设计玻璃钢人物雕塑特色海南玻璃钢雕塑厂家多重优惠南通玻璃钢大型雕塑蜗牛玻璃钢雕塑浙江通道商场美陈销售广东玻璃钢牛动物雕塑设计与制作钦州商场美陈雕塑厂家厦门玻璃钢造型雕塑饶阳玻璃钢雕塑厂罗湖玻璃钢雕塑造型克拉玛依玻璃钢雕塑造型贴金卡通雕塑小丑玻璃钢雕塑周口玻璃钢人物学校镂空雕塑厂家西宁玻璃钢雕塑价格大型商场创意商业美陈定制玻璃钢花盆怎么制作过程商场美陈价格方案铜川玻璃钢牌匾雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化