C语言 文件函数

news2024/11/26 5:35:04

目录

1. 文件的打开和关闭

2. 文件的顺序读写

2.1 顺序读写函数介绍

2.2读文件(读文件只能读一次)

2.3写文件

3. 文件的随机读写

3.1 fseek

3.2 ftell

3.3 rewind

4.文件读取结束的判定

4.1 被错误使误的 feof


我对读写的理解:(从文件里)读--get,read,scanf ,写(到文件里)--put,write,printf

1. 文件的打开和关闭

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件

ANSI C 规定使用 fopen 函数来打开文件, fclose 来关闭文件。

//打开⽂件
FILE* fopen(const char* filename, const char* mode);
//关闭⽂件
int fclose(FILE* stream);

注意:相对路径(若没有A.txt,直接在源文件所在文件夹中创建A.txt):文件名.文件类型;如:fopen("A.txt","w");(访问源文件所在文件夹中的A.txt)

           绝对路径:文件路径+文件名.文件类型;如:fopen("D:\\code\\A.txt","w");(\\防止出现转义字符)

mode表示文件的打开模式,下面都是文件的打开模式:

2. 文件的顺序读写

2.1 顺序读写函数介绍

2.2读文件(读文件只能读一次)

读C.txt文件:

#include <stdio.h>//读文件--"r",fgetc,fgets,fscanf

int main()
{
	FILE* pf = fopen("C.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//int ch = 0;
	//while ((ch = fgetc(pf)) != EOF)//int fgetc ( FILE * stream );
	//{
	//	printf("%c", ch);
	//}

	//char arr[20] = { 0 };
    //fgets(arr, 8, pf);//char * fgets ( char * str, int num, file * stream );
    //fgets读7个字符+'\0'
    //printf("%s", arr);

	//char arr[20] = { 0 };
	//fscanf(pf, "%s", arr);//int fscanf ( FILE * stream, const char * format, ... );
	//printf("%s", arr);

	fclose(pf);
	pf = NULL;
	return 0;
}
#include <stdio.h>//读文件--"rb",fread

int main()
{
	FILE* pf = fopen("C.txt", "rb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	char arr[20] = { 0 };
	fread(arr, sizeof(arr[0]), 4, pf);//size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		printf("%c", arr[i]);
	}
 
	fclose(pf);
	pf = NULL;
	return 0;
}

2.3写文件

要在C.txt文件中写入:

#include <stdio.h>//写文件--"w",fputc,fputs,fprintf

int main()
{
	FILE* pf = fopen("C.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//fputc('c', pf);//int fputc ( int character, FILE * stream );
	//fputc('f', pf);

	//fputs("cf", pf);//int fputs ( const char * str, FILE * stream );

	//fprintf(pf, "%s", "cf");//int fprintf ( FILE * stream, const char * format, ... );

	fclose(pf);
	pf = NULL;
	return 0;
}
#include <stdio.h>//写文件--"wb",fwrite

int main()
{
	FILE* pf = fopen("C.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	char arr[] = "cfg";
	fwrite(arr, sizeof(arr[0]), 2, pf);//size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

	fclose(pf);
	pf = NULL;
	return 0;
}

"a""w"类似,只是"a"是在后面追加数据"w"会把之前的数据覆盖重新写数据

注意:字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储,所以“rb”可以在文本文件中读出正确的字符,"rw"可以将真确的字符写到文本文件中

3. 文件的随机读写

3.1 fseek

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

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

                                                   偏移量                             起始位置

SEEK_SET 文件的起始位置

SEEK_CUR 文件指针当前位置

SEEK_END 文件末尾

3.2 ftell

返回 文件指针 相对于 起始位置偏移量

 long int ftell ( FILE * stream );

3.3 rewind

文件指针的位置回到文件的起始位置

void rewind ( FILE * stream );

例子:

#include <stdio.h>//fseek,ftell,rewind

int main()
{
	FILE* pf = fopen("C.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("%c", fgetc(pf));//a
	fseek(pf, 4, SEEK_CUR);//int fseek ( FILE * stream, long int offset, int origin );
	printf("%c", fgetc(pf));//f

	printf("%d", ftell(pf));//6//long int ftell ( FILE * stream );

	rewind(pf);
	printf("%c", fgetc(pf));//a//void rewind ( FILE * stream );

	fclose(pf);
	pf = NULL;
	return 0;
}

4.文件读取结束的判定

4.1 被错误使误的 feof

牢记:在文件读取过程中,不能用feof函数的返回值 直接来判断文件的是否结束

feof 的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。

1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )

2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。如:fread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 集成H2数据库,启动执行sql, 中文乱码

目录 H2数据库介绍 SpringBoot版本&#xff1a;SpringBoot 2.1.12.RELEASE 快速集成H2&#xff0c;maven依赖 快速集成H2&#xff0c;数据源及关键参数配置 spring.datasource.schema参数&#xff08;建表SQL脚本&#xff09; spring.datasource.data参数&#xff08;更新、…

【鹤城杯 2021】 CRYPTO刷题

easy_crypto 附件easy_crypto.txt&#xff0c;内容是社会核心主义观 公正公正公正诚信文明公正民主公正法治法治诚信民主自由敬业公正友善公正平等平等法治民主平等平等和谐敬业自由诚信平等和谐平等公正法治法治平等平等爱国和谐公正平等敬业公正敬业自由敬业平等自由法治和…

联想电脑VMware虚拟机VT开启虚拟化

以联想电脑为例。 关机重启&#xff0c; 有的电脑是按F2&#xff0c; 有的是按fnF2 进入BIOS&#xff0c;左右键&#xff0c;选择Configuration&#xff0c; 再上下键选择 Intel Virtual Technology 按回车键&#xff0c;再按上下键选择 Enable &#xff0c;回车确认。 按fn…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

dockerhub右键快速搜索脚本

Chrome 浏览器扩展的后台脚本&#xff0c;用于创建右键菜单项&#xff0c;并根据用户的操作在新的标签页中打开 Docker Hub 网站或者进行搜索。 // 创建右键菜单项&#xff0c;用于打开 Docker Hub 网站 chrome.contextMenus.create({id: search-home, // 菜单项的唯一标识符t…

移除元素Java实现

题意 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 额外空间 并 原地 修改数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元…

Netty实现udp服务器

1、TCP与UDP通信协议 网络传输层协议有两种&#xff0c;一种是TCP&#xff0c;另外一种是UDP。 TCP是一种面向连接的协议&#xff0c;提供可靠的数据传输。TCP通过三次握手建立连接&#xff0c;并通过确认和重传机制&#xff0c;保证数据的完整性和可靠性。TCP适用于对数据准…

红豆Cat 1开源|项目二: 从0-1设计一款MQTT版本DTU(支持GNSS)产品的软硬件全过程

MQTT版DTU&#xff08;GNSS&#xff09;项目概述 DTU 通常指的是数据传输单元&#xff0c;它是一种用于将现场设备的数据通过无线或有线方式传输到远程控制中心的设备。DTU 可以实现设备与控制中心之间的数据通信&#xff0c;以便实时监测和控制设备的运行状态。 产品定义描述…

SpringBoot内容协商快速入门Demo

1.什么内容协商 简单说就是服务提供方根据客户端所支持的格式来返回对应的报文&#xff0c;在 Spring 中&#xff0c;REST API 基本上都是以 json 格式进行返回&#xff0c;而如果需要一个接口即支持 json&#xff0c;又支持其他格式&#xff0c;开发和维护多套代码显然是不合理…

面对DDOS攻击,有哪些解决办法

随着互联网带宽的持续增长以及DDOS黑客技术的发展&#xff0c;DDOS拒绝服务攻击的实施变得愈发容易。商业竞争、打击报复、网络敲诈等多种因素&#xff0c;各行各业的用户都曾受到DDOS攻击的威胁。 一旦遭受到DDOS攻击&#xff0c;随之而来的就是业务宕机&#xff0c;用户无法…

C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

本文介绍基于C语言GDAL库&#xff0c;批量读取大量栅格遥感影像文件&#xff0c;并生成各像元数值的时间序列数组的方法。 首先&#xff0c;我们来明确一下本文所需实现的需求。现在有一个文件夹&#xff0c;其中包含了很多不同格式的文件&#xff0c;如下图所示。 其中&#x…

机器学习-08-关联规则和协同过滤

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则和协同过滤。 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 2…

2024阿里云2核4G服务器优惠价格表_2核4G性能测评

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

6种xinput1_3.dll丢失的解决办法,并探讨xinput1_3.dll丢失的原因及其属性。

xinput1_3.dll扮演着Visual C运行时库中不可或缺的角色&#xff0c;众多电脑软件都需依赖它以确保正常运行。 当您启动软件时&#xff0c;若遇到xinput1_3.dll无法执行代码的提示&#xff0c;可能会导致软件无法如常启动或运行。本文将向您介绍6种解决方案&#xff0c;并探讨xi…

潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞复现

0x01 产品简介 水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。由山东潍微科技股份有限公司研发,近年来,公司全力拓展提升水务、水利信息化业务…

二叉数应用——最优二叉树(Huffman树)、贪心算法—— Huffman编码

1、外部带权外部路径长度、Huffman树 从图中可以看出&#xff0c;深度越浅的叶子结点权重越大&#xff0c;深度越深的叶子结点权重越小的话&#xff0c;得出的带权外部路径长度越小。 Huffman树就是使得外部带权路径最小的二叉树 2、如何构造Huffman树 &#xff08;1&#xf…

Prime (2021): 2

前言 这个靶机有亿点难,收获很多。打靶的时候&#xff0c;前面很顺&#xff0c;到创建ssh公钥之后就一点不会了。 1 01 arp扫描&#xff0c;发现有一个130&#xff0c;再查看端口 有22&#xff0c;80&#xff0c;129&#xff0c;445&#xff0c;10123 dirb扫描目录 这…

【机器学习】决策树(Decision Tree,DT)算法介绍:原理与案例实现

前言 决策树算法是机器学习领域中的一种重要分类方法&#xff0c;它通过树状结构来进行决策分析。决策树凭借其直观易懂、易于解释的特点&#xff0c;在分类问题中得到了广泛的应用。本文将介绍决策树的基本原理&#xff0c;包括熵和信息熵的相关概念&#xff0c;以及几种经典的…

国内电缆附件市场规模保持增长态势 高压电缆附件占据较多市场份额

国内电缆附件市场规模保持增长态势 高压电缆附件占据较多市场份额 电缆附件是连接电缆与输配电线路及相关配电装置的产品&#xff0c;主要用于保护电缆、连接电缆或改变电缆方向&#xff0c;是电缆系统的重要组成部分。电缆附件种类多样&#xff0c;根据材料及制作工艺不同可分…

遥感影像为什么需要分块处理

原理 遥感影像通常具有极高的分辨率和大量的数据量&#xff0c;这就使得全景处理遥感影像成为一项极具挑战的任务。首要的问题是&#xff0c;大规模的遥感影像可能会超过硬件设备&#xff0c;特别是GPU的内存容量。其次&#xff0c;处理大规模遥感影像的计算复杂度非常高&…