两小时让你全方位的认识文件(完结)

这篇具有很好参考价值的文章主要介绍了两小时让你全方位的认识文件(完结)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上期阿博给友友们讲了一些关于文件的一些读写操作,这期给友友们分享一下二进制的方式和文件操作的一些误区,下面来跟着阿博走进文件吧🤗🤗🤗

一.fread和fwrite功能介绍

二.文件的随机读写

三.文本文件和二进制文件

四.文件读取结束的判定

五.文件缓冲区

一.fread和fwrite功能介绍

fwrite
两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)
代码解析

struct S 
{
	char name[20];
	int age;
	float  score;
};
int  main()                  //测试fwrite
{
	struct S s = { "zhangsan",20,94.5f };
	FILE* pf = fopen("text.dat", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	fwrite(&s, sizeof(struct S), 1, pf);
	fclose(pf);
	pf = NULL;
	return  0;
}

两小时让你全方位的认识文件(完结)

友友们,这里看不懂很正常,因为我们这里是以二进制的形式去写文件,它们的二进制形式和文本形式是截然不同的

fread

两小时让你全方位的认识文件(完结)

代码解析

struct S
{
	char name[20];
	int age;
	float  score;
};
int  main()                               //测试fread
{
	struct S s = {0};
	FILE* pf = fopen("text.dat", "rb");
	if (pf == NULL)
	{     
		perror("fopen");
		return;
	}
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f", s.name, s.age, s.score);
	fclose(pf);
	pf = NULL;
	return  0;
}

两小时让你全方位的认识文件(完结)

所以说友友们,虽然二进制的文件我们看不懂,但是我们可以以二进制形式把它读出来😲😲😲

二.文件的随机读写

fseek

两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)

友友们注意了,我先把text.dat文件里面放abcdefjhi

两小时让你全方位的认识文件(完结)

代码解析

int main()
{
	FILE* pf = fopen("text.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	int ch = fgetc(pf);
	printf("%c\n", ch);    //a
	ch = fgetc(pf);
	printf("%c\n", ch);    //b
	ch = fgetc(pf);
	printf("%c\n", ch);    //c
	ch = fgetc(pf);  
	printf("%c\n", ch);    //d

	//这次我们希望读到的是b
	fseek(pf, -3, SEEK_CUR);
	//fseek(pf,1,SEEK_SET);
	//fseek(pf,-7,SEEK_END);
	ch = fgetc(pf);
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;
	return  0;
}

两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)

ftell

两小时让你全方位的认识文件(完结)

功能:返回文件指针相对于起始位置的偏移量.

代码解析

int main()
{
	FILE* pf = fopen("text.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	int ch = fgetc(pf);
	printf("%c\n", ch);    //a
	ch = fgetc(pf);
	printf("%c\n", ch);    //b
	ch = fgetc(pf);
	printf("%c\n", ch);    //c
	ch = fgetc(pf);  
	printf("%c\n", ch);    //d

	这次我们希望读到的是b
	//fseek(pf, -3, SEEK_CUR);
	//ch = fgetc(pf);
	printf("%d\n", ftell(pf));
	fclose(pf);
	pf = NULL;
	return  0;
}

两小时让你全方位的认识文件(完结)

rewind

两小时让你全方位的认识文件(完结)

功能:让文件指针的位置回到文件的起始位置.

代码解析

int main()
{
	FILE* pf = fopen("text.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	int ch = fgetc(pf);
	printf("%c\n", ch);    //a
	ch = fgetc(pf);
	printf("%c\n", ch);    //b
	ch = fgetc(pf);
	printf("%c\n", ch);    //c
	ch = fgetc(pf);  
	printf("%c\n", ch);    //d

	这次我们希望读到的是b
	//fseek(pf, -3, SEEK_CUR);
	//ch = fgetc(pf);
	/*printf("%d\n", ftell(pf));*/
	rewind(pf);
	ch = fgetc(pf);
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;
	return  0;
}

两小时让你全方位的认识文件(完结)

三.文本文件和二进制文件

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。

代码解析

int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");
	fwrite(&a, 4, 1, pf);//二进制的形式写到文件中
	fclose(pf);
	pf = NULL;
	return 0;
}

下面阿博给友友们介绍一下查看二进制的方法😽😽😽

两小时让你全方位的认识文件(完结)

两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)

四.文件读取结束的判定

友友们注意,这里有个雷区⛳⛳⛳
牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束.
feof的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束.
文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
例如:
1.fgetc 判断是否为 EOF .
2.fgets 判断返回值是否为NULL.
二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
fread判断返回值是否小于实际要读的个数.

两小时让你全方位的认识文件(完结)

五.文件缓冲区

ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

两小时让你全方位的认识文件(完结)

代码解析

#include <stdio.h>
#include <windows.h>
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)
	//注:fflush 在高版本的VS上不能使用了
	printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注:fclose在关闭文件的时候,也会刷新缓冲区
	pf = NULL;
	return 0;
}

两小时让你全方位的认识文件(完结)
两小时让你全方位的认识文件(完结)

这里可以得出一个结论:因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做,可能导致读写文件的问题文章来源地址https://www.toymoban.com/news/detail-431764.html

好了友友们,文件的内容到这里就告一段落了,希望友友们能够有所收获,真正的掌握文件,码字不易,友友们可以给阿博点个关注哦,后续阿博会继续分享干货知识,让我们下期再见.🌺🌺🌺

到了这里,关于两小时让你全方位的认识文件(完结)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kotlin全方位-简单解析

    Kotlin是一种现代化的静态类型编程语言,由JetBrains公司开发。它可以在Java虚拟机(JVM)上运行,并且可以与Java代码无缝地进行互操作。Kotlin旨在提供更简洁、更安全、更具表达力和更高效的编程语言。 Android开发:Kotlin被广泛用于Android应用程序的开发。它可以与Java代码互操

    2024年02月10日
    浏览(42)
  • Java——线程睡眠全方位解析

    在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可以在任意时间对线程进行唤醒。 线程睡眠的方法有以下 5 个: Thread.sleep TimeUnit wait Condition LockSu

    2024年02月04日
    浏览(45)
  • 精彩解读:短链接应用全方位探究

    1. 短链接的定义和原理 短链接是一种将长网址转换为短网址的服务,通过简化网址长度,方便用户分享和传播链接。短链接服务通过将长网址映射到短标识符的方式,实现对原始网址的压缩和简化。用户在访问短链接时,系统会将短链接还原为原始长网址,实现跳转到目标网

    2024年04月08日
    浏览(37)
  • kafka知识点全方位讲解

    Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。 Kafka是一个分布式消息队列:

    2023年04月25日
    浏览(32)
  • 全方位了解VR全景展示与制作

    引言: 虚拟现实(VR)技术正在以惊人的速度改变我们的生活方式和体验方式。其中,VR全景展示与制作作为虚拟现实的重要应用之一,为用户提供了身临其境的视听体验。  一、了解VR全景展示与制作 1.VR全景展示 VR全景展示是一种通过虚拟现实技术,将用户带入真实或虚构

    2024年02月13日
    浏览(30)
  • Android Jetpack组件的全方位分析

    Jetpack是一个用于简化Android应用程序开发的工具包,包含了一系列的组件和工具。Jetpack包含了很多组件,如LiveData、ViewModel、Room、Data Binding、Navigation等。 Jetpack组件是一种更高级别的抽象,它们可以提供更简洁、更易于使用的API。支持库是Jetpack组件的底层实现。 基本概念和

    2024年02月11日
    浏览(32)
  • ⛳前端进阶:SEO 全方位解决方案

    SEO 代表搜寻引擎最佳化/搜寻引擎优化(英文全名Search Engine Optimization,简称SEO),是指通过了解搜寻引擎的自然排名的算法逻辑,以提高目标网站在有关搜寻引擎内排名的方式。 网站的 SEO 至关重要,它可以让你的网站获得更好的排名和流量,从而提高网站知名度。对于一些盈

    2024年02月09日
    浏览(39)
  • SQL全方位攻略:3.SQL标准

    1.数据库介绍 2.SQL介绍 【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 为了确保不同厂商数据库系统之间的兼容性和互操作性,用于控制SQL查询的行为和数据存储结构等方面的统一性,由国际组织或者国家标准化组织制定

    2024年02月05日
    浏览(39)
  • 全方位对比 Postgres 和 MySQL(2023 版)

    根据 2023 年的 Stack Overflow 调研 (https://survey.stackoverflow.co/2023/) ,Postgres 已经取代 MySQL 成为最受敬仰和渴望 (the most admired, desired) 的数据库。     随着 Postgres 的发展势头愈发强劲,在 Postgres 和 MySQL 之间做选择变得更难了。   如果看安装数量,MySQL 可能仍是全球最大的开源数

    2024年02月13日
    浏览(26)
  • 【全方位解析】如何写好技术文章

    前言 为何而写 技术成长 :相对于庞大的计算机领域的知识体系,人的记忆还是太有限了,而且随着年龄的增大,记忆同样也会逐渐衰退,正如俗话所说“好记性不如烂笔头”。并且在分享博客的过程中,我们也可以和大神交流,进而发现自己的认知错误,纠正知识体系。最

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包