文件的相关概念及用法

news2024/12/25 23:42:01

文件的作用

程序运行时产生的数据都属于临时文件,程序一旦运行结束就会被释放。若想让数据保存下来,则可以通过文件将数据持久化

文件需要包含的头文件<fstream>(文件流)

文件分类

文件分为文本文件和二进制文件。

文本文件:文件以文本的ASCII码形式存储在计算机中

二进制文件:文件以文本的二进制形式存储在计算机中,用户一半不能直接读懂它们。

操作文件的三大类

1、ofstream(output file stream--输出文件流):用于写操作

2、ifstream(input file stream--输入文件流):用于读操作

3、fstream(file stream--文件流)用于读写操作(即可读可写)

文本文件

写文件

写文件包含步骤:

1、包含头文件

#include<fstream>

2、创建流对象

eg:ofstream/fstream    ofs;

3、打开文件

ofs.open("文件路径",打开方式);

4、写数据

ofs<<"写入的数据";(类似于output)

5、关闭文件

ofs.close(); 

文件打开方式

 注意:文件打开方式可以配合使用,利用 ’|‘操作符

例如:用二进制方式写文件:

ios::binary | ios::out

eg:

#include<iostream>
using namespace std;
#include<string>
#include<fstream>
int main()
{
	ofstream ofs;
	ofs.open("text", ios::out);
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	ofs.close();
	system("pause");
	return 0;
}

 读文件

读文件步骤与写文件步骤相似,分为:

1、包含头文件

2、创建流对象

3、打开文件并判断是否打开成功

4、读数据(有四种读取方式)

5、关闭文件

eg:

#include<iostream>
using namespace std;
#include<string>
#include<fstream>
int main()
{
	ifstream ifs;
	ifs.open("text.txt", ios::in);
	if (!ifs.is_open() )//ifs.is_open()执行结果:若当前路径下存在文件名为text.txt的文件,则返回true,否则返回false
	{
		cout << "此文件不存在" << endl;
	}
	else
	{
		//读数据
		//第一种
		/*char buf[1024];
		while (ifs >> buf)
		{
			cout << buf << endl;
		}*/
		//第二种
		/*char buf[1024];
		while (ifs.getline(buf, sizeof(buf)))
		{
			cout << buf << endl;
		}*/
		//第三种
		string buf;
		while (getline(ifs, buf))//从ifs中读取一整行的数据,放入buf中
		{
			cout << buf << endl;
		}
		//第四种:逐字符读取,不推荐
		//关闭文件
		ifs.close();
		
		
	}
	return 0;
}

二进制文件

即以二进制的方式对文件进行读写操作

打开方式要指定为ios::binary

写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型:

ostream& write(const char* buffer,int len);

参数解释:字符指针buffer指向内存中一端存储空间,len是读写的字节数 

eg:

#include<iostream>
using namespace std;
#include<fstream>
//将一个person类写入二进制文件中
class person {
public:
	char name[64];//由于二进制文件写文件底层原理是用C实现的,因此此处用字符数组而不是string,防止出现问题
	int age;
};
int main()
{
	//1、包含头文件  2、创建流对象    
	ofstream ofs("person.txt", ios::out |ios::binary);//ofstream底层有一个有参构造函数,因此可以将第三步合并到第二步
	// 3、打开文件
	//ofs.open("person.txt", ios::out|ios::binary);
	// 4、写文件
	person p = {"张三",18};//实例化对象p
	ofs.write((const char*)&p, sizeof(person));//第一个参数:&p--返回的是person*,再将person*强转成write需要的const char*
	// 5、关闭文件
	ofs.close();
	return 0;
}

读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:

istream &read(char* buffer,int len);

参数解释:字符指针buffer指向内存中的一段空间,len是读写的字节数

eg:

#include<iostream>
using namespace std;
#include<fstream>
//将一个person类写入二进制文件中
class person {
public:
	char name[64];//由于二进制文件写文件底层原理是用C实现的,因此此处用字符数组而不是string,防止出现问题
	int age;
};
int main()
{
	//1、包含头文件  2、创建流对象    
	ifstream ifs("person.txt",ios::in |ios::binary);
	//3、打开文件
	if (!ifs.is_open())//打开文件失败
	{
		cout << "person.txt不存在" << endl;
	}
	else
	{
		//4、读文件
		person p;//实例化对象p
		ifs.read((char*)&p, sizeof(p));//将文件中的数据读入p中
		cout << "姓名:" << p.name << "\t" << "年龄:" << p.age << endl;
		// 5、关闭文件
		ifs.close();
	}
	return 0;
}

 

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

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

相关文章

快速上手Git

目录 一、Git概述 二、Git的常用命令 Git全局配置 获取Git仓库 基本概念 本地仓库操作 远程仓库操作 分支操作 标签操作 三、在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓库操作 分支操作 冲突解决 一、Git概述 Git是一个分布式版本控制工具&…

探索设计模式的魅力:深入了解适配器模式-优雅地解决接口不匹配问题

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 目录 一、引言 1. 概述 2. 为什么需要适配器模式 3. 本文的目的和结构 二、简价 1. 适配器模式的定义和特点 定义 特点 2. 适配器模式的作用和适用场景 作用 适用场景 3. 适配器模式与其他设计模式的比较 三、适配…

DolphinScheduler + Amazon EMR Serverless 的集成实践

01 背景 Apache DolphinScheduler 是一个分布式的可视化 DAG 工作流任务调度开源系统&#xff0c;具有简单易用、高可靠、高扩展性、⽀持丰富的使用场景、提供多租户模式等特性。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方…

代码随想录算法刷题训练营day18

代码随想录算法刷题训练营day18&#xff1a;LeetCode(257)二叉树的所有路径、LeetCode(404)左叶子之和 LeetCode(257)二叉树的所有路径 题目 代码 import java.util.ArrayList; import java.util.List;/*** Definition for a binary tree node.* public class TreeNode {* …

媒体邀约:怎么吸引总体目标受众?

新闻媒体影响力日益扩大。不论是公司、机构还是其他&#xff0c;都希望能够通过新闻媒体的曝光来吸引更多总体目标受众。要想真正吸引住总体目标受众并非易事&#xff0c;需要一定的方案和方法。下面我们就深入探究媒体邀约推广的真相&#xff0c;共享怎么吸引总体目标受众的方…

挂耳耳机哪个牌子好?挂耳耳机产品的几大推荐

如果你也是个运动爱好者&#xff0c;那你一定知道边运动边听歌是多么的提神! 我试过好多种耳机&#xff0c;那些长长的线总在运动时不断甩来甩去&#xff0c;真是让人烦不胜烦。而且戴久了耳朵里也不舒服。所以找一款真正适合运动的挂耳耳机太重要了&#xff0c;它能让你的运动…

【Docker】docker Overlay2 文件系统原理

概述 overlayFS是被称为联合文件系统的其中一个解决方案。在2014年&#xff0c;发布了第一个版本并且合并到了Linux的内核3.18版本中&#xff0c;此时&#xff0c;在docker被称为是overlay文件驱动。后来在Linux 内核4.0 版本中进行了改进&#xff0c;称为overlay2。&#xff…

模拟堆

import java.util.Scanner;public class Main{static int N 100010, size,m;static int[] h new int[N]; //h[i]表示下标i这个点是第多少static int[] hp new int[N]; //hp[i]表示下标为i的节点是第几个被加进来的static int[] ph new int[N]; //ph[i]表示第i个加进来…

BIO、NIO变成与直接内存、零拷贝

一、网络通信 1、什么是socket&#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。客户端连接上一个服务端&#xff0c;就会在客户端中产生一个 socket 接口实例&#xff0c;服务端每接受 一个客户端…

qt初入门7:进度条,定时器,时间控件练习

参考课本demo&#xff0c;空闲时间练习一下进度条&#xff0c;定时器&#xff0c;日期相关控件和使用。 1&#xff1a;demo运行结果 2&#xff1a;进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制&#xff0c;也可以通过其他控件上获取到的值…

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章&#xff0c;主要科普的是Android SystemUI &#xff0c; 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;用于演示欧姆定律。用户可以通过输入电阻值来计算电流&#xff0c;并在图形上显示结果。该程序使用了Tkinter库来创建GUI&#xff0c;matplotlib库来绘制图形&#xff0c;以及numpy库进…

使用git工具向GitHub远程仓库提交代码

注意更新仓库&#xff1a; 远程仓库更新方法&#xff1a; 本地仓库更新方法&#xff1a;在终端进入克隆的文件夹&#xff0c;依次执行如下指令&#xff1a; git config pull.rebase false //使用默认的合并策略 git pull //执行实际的拉取操作以下为常规操作&#xff…

【React教程】(3) React之表单、组件、事件处理详细代码示例

目录 事件处理示例1示例2示例3&#xff08;this 绑定问题&#xff09;示例4&#xff08;传递参数&#xff09;Class 和 Style 表单处理组件组件规则注意事项函数式组件&#xff08;无状态&#xff09;类方式组件&#xff08;有状态&#xff09;组件传值 Propsthis.props.childr…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入&#xff08;文本转向量&#xff09; 模型下载&#xff1a;bert预训练模型下载-CSDN博客 参考文章&#xff1a;使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

神经网络建立(结果可变)最小神经元

目录 介绍&#xff1a; 初始化&#xff1a; 建模: 预测&#xff1a; 改变结果&#xff1a; 介绍&#xff1a; 在深度学习中&#xff0c;神经元通常指的是人工神经元&#xff08;或感知器&#xff09;&#xff0c;它是深度神经网络中的基本单元。深度学习的神经元模拟了生…

腾讯发表多模态大模型最新综述,从26个主流大模型看多模态效果提升关键方法

在大规模语言模型&#xff08;LLMs&#xff09;通往通用人工智能&#xff08;AGI&#xff09;的道路中&#xff0c;从传统的单一的“语言模态”扩展到“图像”、“语音”等等的“多模态”必然是大模型进化的必经之路。 在过去的 2023 年&#xff0c;多模态大规模语言模型&…

Java 与 JavaScript的区别

Java 与 JavaScript的区别 Java 与 JavaScript&#xff1a;概述Java的特点JavaScript 的起源JavaScript 的特点Java 与 JavaScript&#xff0c;哪个更好&#xff1f;JavaScript 与 Java 相似吗&#xff1f;Java 与 JavaScript 的区别JavaScript 在服务器端的运行方式是怎样的&a…

arco design table遇到的一些问题

问题1&#xff1a;不知情就成了树形table table中不知道为啥就多了个树形加号在前面&#xff0c;查找问题后发现&#xff0c;是后端返回的数据中有children&#xff0c;框架中默认对这个参数做了树形结构。 解决办法&#xff1a; 当时没找到取消或者修改字段的属性或方法&…