C语言中的文件操作

C语言中的文件操作

在这里插入图片描述

1、文件的打开

创建文件指针变量

File* pf;

定义一个指向FILE类型数据的指针变量,可以使pf指向某个文件的文件信息区,通过文件指针变量就能够找到与它关联的文件

(1)文件的打开

使用fopen函数打开文件,使用fclose函数关闭文件

打开函数的使用形式:

FILE* fopen(const char* filename,const char* mode);//第一个参数是文件名,第二个参数是打开的方式

打开的方式有:

在这里插入图片描述

完整的文件打开操作:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {

	FILE* pf = fopen("text.txt", "r");//这个文件就和代码在一个路劲下,使用的是相对路径
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
	}

	//读文件


	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}

如果想打开其他位置上的文件就需要加上绝对路径:

比如这里我们想打开桌面上的文件:

FILE* pf = fopen("C:\\Users\\邓欣洋\\Desktop\\text.txt", "r");//但是需要使用转义字符,原本使用一个‘\’,这里就需要两个‘\’
(2)文件的读写
  • 关于一个字符的读,使用的函数为fputc()函数
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {

	FILE* pf = fopen("text.txt", "w");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}

	//写文件
	
	fputc('g', pf);//写一个字符到文件里面


	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
  • 关于文件的读:

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//读文件
      	
      	char c = fgetc(pf);
      	printf("%c\n", c);//读一个字符到文件里面
      
      
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 写一行数据到文件里面

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "w");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//写文件
      	fputs("hello world!!!", pf);//这是写一行数据到文件里面,原来有的内容就会被现在的数据覆盖
      	//如果在这里不想销毁之前的内容可以将方式改成a,即
      	//FILE* pf = fopen("text.txt", "a");
      
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 读一行数据,并打印出来读的是什么

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//读文件
      	char arr[10];
      	
      	fgets(arr,5,pf);//第一个参数是将文件中的数据读到那个地方里面,第二个参数是读多少个字符,第三个数据是从哪个文件里面读
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 格式化写数据到文件里面

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      
      struct S {
      	char arr[10];
      	int age;
      	float grade;
      };
      int main() {
      	struct S s = { "zhangsan",18,98.5 };
      	FILE* pf = fopen("text.txt", "w");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      
      	//写数据
      	fprintf(pf, "%s %d %f", s.arr, s.age, s.grade);
      
      	
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 格式化读数据

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      
      struct S {
      	char arr[10];
      	int age;
      	float grade;
      };
      int main() {
      	struct S s = { 0 };
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      
      	//读数据
      	fscanf(pf, "%s %d %f", &(s.arr), &(s.age), &(s.grade));
      	printf("%s %d %f\n", s.arr, s.age, s.grade);
      
      	
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    

以上的函数是针对所有的输入和输出流

接下来的函数只针对文件流,只能写到文件里面,或者从文件里面读数据

(3)fwrite函数

以二进制的形式写进文件中

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {"zhangsan",20,85};
	//以二进制的形式写入文件
	FILE* pf = fopen("text.txt", "wb");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	//以二进制的方式写
	fwrite(&s, sizeof(struct S), 1, pf);
	
	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
(4)fread函数

以二进制的形式读数据

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {0};
	//以二进制的形式读入文件
	FILE* pf = fopen("text.txt", "rb");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	//以二进制的方式读
	fread(&s, sizeof(struct S), 1, pf);//第一个参数是读到哪里去,第二个参数是所读数据的大小,第三个参数是要读多少个这样的数据,第四个参数是从哪里读
	printf("%s %d %f\n", s.arr, s.age, s.grade);

	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
(5)sprintf和sscanf函数

sscanf是从一个字符串中转化成一个格式化的数据,sprintf是把一个格式化的数据转化成字符串

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {"zhangsan",20,97};
	struct S tmp = { 0 };
	char buf[100] = { 0 };
	//把s中的格式化的数据转化成字符串buf
	sprintf(buf, "%s %d %f", s.arr, s.age, s.grade);

	//这个buf里面就是"zhangsan 20 97.00000"是一个字符串

	//从字符串buf中获取一个格式化的数据到tmp中;
	sscanf(buf, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.grade));

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的餐厅点餐系统

基于SpringbootVue的餐厅点餐系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 首页展示 菜品详情页 菜品信息 个人中心 后台管理 菜品信息管理 用户管理 菜…

less+rem+媒体查询布局(主流)

rem适配布局 一.rem基础二.媒体查询1.概念2.语法&#xff08;1&#xff09;.mediatype查询类型&#xff08;2&#xff09;.关键字&#xff08;3&#xff09;.媒体特性&#xff08;4&#xff09;.应用 3.媒体查询rem实现元素动态大小变化4.引入资源&#xff08;针对不同媒体查询…

【系统分析师】需求工程☆

文章目录 0、需求工程概述1、需求的分类2、需求获取3、需求分析3.1 结构化需求分析-SA3.1.1DFD- 数据流图3.1.2 STD-状态转换图3.1.3 ER图-实体联系图 3.2 面向对象需求分析-OOA3.2.1 工具-UML图3.2.2 UML分类3.2.3 用例图 ☆3.2.4 类图 / 对象图 ☆3.2.5 顺序图3.2.6 活动图3.…

斐尔玫瑰荣获《中国3.15诚信企业》证书,诚信经营赢得社会认可

2024年&#xff0c;斐尔玫瑰&#xff0c;荣获了备受瞩目的《中国3.15诚信企业》证书。这一荣誉的获得&#xff0c;不仅是对斐尔玫瑰长期以来坚持诚信经营、提供优质产品和服务的肯定&#xff0c;更是对其在消费者心目中建立起的良好信誉和口碑的认可。 斐尔玫瑰作为女性私密护…

自动化测试之httprunner框架hook函数实操

本篇介绍httprunner中hook函数的使用&#xff0c;以及通过编程能力实现建设自动化测试更全面的场景覆盖 前置&#xff1a; 互联网时代让我们更快的学习到什么是Httprunner 正文&#xff1a; 经过上文了解到这个框架怎么使用之后&#xff0c;我们开始来探讨一下我们为什么要用…

MySQL分区表(14/16)

分区表 基本概述 分区表是数据库中一种用于优化大型表数据管理和查询性能的技术。它将一个表的数据根据特定的规则或条件分割成多个部分&#xff0c;每个部分称为一个分区。每个分区可以独立于其他分区进行存储、管理和查询&#xff0c;这样可以提高数据处理的效率&#xff0…

mybatis(9)-逆向工程+PageHelper+注解方式开发

最后一篇&#xff01;&#xff01; 1、逆向工程1.1、普通版1.2、增强版 2、PageHelper2.1 limit2.2 插件 3、注解开发3.1 Insert3.2Delete3.3 Update3.4 Select Results 1、逆向工程 1.1、普通版 所谓的逆向工程是&#xff1a;根据数据库表逆向生成Java的pojo类&#xff0c;S…

智过网:注册安全工程师注册有效期与周期解析

在职业领域&#xff0c;各种专业资格认证不仅是对从业者专业能力的认可&#xff0c;也是保障行业安全、规范发展的重要手段。其中&#xff0c;注册安全工程师证书在安全生产领域具有举足轻重的地位。那么&#xff0c;注册安全工程师的注册有效期是多久呢&#xff1f;又是几年一…

伺服系统中滤波器算法的工程实现方案

此文章主要致力于描述如何将伺服驱动系统中的数字滤波器用编程语言来实现。

【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数…

银行渠道整合平台应用架构

渠道整合平台将 功能微服务化&#xff0c;将服务流程标准化。微服务 化的功能能够进行各种组合使用。而标准化的流程可同时作用于所有渠道&#xff0c;保证体验一致。未来在进行流程变更的时候可有效避免各渠道的重复开发。 • 渠道整合平台避免了各个渠道对于同一个业务的差异…

C# dynamic 数据类型

在C#中&#xff0c;dynamic是一种数据类型&#xff0c;它允许在运行时推迟类型检查和绑定。使用dynamic类型&#xff0c;可以编写更具灵活性的代码&#xff0c;因为它允许在编译时不指定变量的类型&#xff0c;而是在运行时根据实际情况进行解析。 dynamic类型的变量可以存储任…

你真的会处理python代码异常吗?

Python 使用称为异常(exception&#xff09;的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时&#xff0c;它都会创建一个异常对象。如果你编写了处理该异常的代码&#xff0c;程序将继续运行&#xff1b;如果你未对异常进行处理&#xff0c;程序将停…

什么是面向对象思想?

面向对象不是一种技术&#xff0c;而是一种思想。它指导我们以什么形式组织代码&#xff0c;以什么思路解决问题。 面向对象编程&#xff0c;是一种通过对象方式&#xff0c;把现实世界映射到计算机世界的编程方法。 面向对象解决问题的思路&#xff1a;把构成问题的事物分解成…

响应式导航栏不会做?看我一分钟学会制作导航栏!

引言 随着互联网技术的飞速发展&#xff0c;用户体验在网页设计中的重要性日益凸显。其中&#xff0c;导航栏作为网页的“指南针”&#xff0c;不仅能帮助用户快速定位所需内容&#xff0c;还能体现网站的整体风格和设计理念。本文将介绍如何使用HTML、CSS和JavaScript制作一个…

1.16 LeetCode总结(基本算法)动态规划2

70. 爬楼梯 首先想到的是递归&#xff1a; // 递归 int climbStairs(int n) {if (n 1) {return 1;} else if (n 2) {return 2;}return climbStairs(n - 1) climbStairs(n - 2); }我们先来看看这个递归的时间复杂度吧&#xff1a; 递归时间复杂度 解决一个子问题时间*子问…

【翻译】再见, Clean Code!

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

【植物大战僵尸融合机器学习】+源码

上期回顾&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是植物大战僵尸。 《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵&#xff0c;每种僵尸都有不同的特点&#xff0c;例如铁桶僵尸拥有极强的抗…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

Java-博客系统(前后端交互)

目录 前言 博客系统基本情况 1 创建项目&#xff0c;引入依赖 2 数据库设计 2.1 分析 2.2 建库建表 3 封装数据库 3.1 在java目录下创建DBUtil类&#xff0c;通过这个类对数据库进行封装 3.2 在java目录下创建实体类&#xff08;博客类Blog&#xff09; 3.2 在java目录下创建…