C++之文件操作

news2024/11/24 14:55:16

1.C++文件操作

  C++中文件操作头文件:fstream。
  文件类型:文件文件和二进制文件。

  • 文件操作三大类:
        ofstream 写操作
        ifstream 读操作
        fstream:读写操作
  • 文件打开方式:
标志说明
ios::in只读
ios::out只写,文件不存在则创建,存在则打开并截断原内容
ios::ate打开一个已有的文件,并指向文件读指针指向文件尾,若文件不存在,则打开出错
ios::app打开文件,从文件尾添加内容,若文件不存在则创建
ios::trunc打开文件同时会截断原内容,单独使用时与ios::out相同
ios::binary以二进制方式打开
ios::in|ios::out打开文件,可读也可写,文件打开时原内容保持不变,若不存在则打开出错
ios::in|ios::out|ios::trunc打开文件,可读写,会截断原内容,文件不存在则创建

2.文本方式写入示例

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	/*1.创建文件*/
	ofstream fp;
	fp.open("test.txt",ios::out);//创建文件,会截断原内容
	if (!fp.is_open())//文件打开失败返回false
	{
		cout << "文件打开失败!" << endl;
		return 0;
	}
	fp << "C++文件操作示例!" << endl;
	fp << "写入数据测试" << endl;
	fp << "姓名:IT_阿水" << "t工作方向:" << "嵌入式开发" << "t工作时间:" << "6年" << endl;
	fp.close();//关闭文件
	system("pause");
}

3.文本方式读取示例

  C++中读取数据有多种方式实现。

2.1 示例1:重载>>读取

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return 0;
	}
	string str;
	while (ifs >> str)//以字符串方式读取
	{
		cout << "str=" << str << endl;;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

2.2 利用成员函数getline读取

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return 0;
	}
	//第二种:getline()
	char buff[1024];
	while (ifs.getline(buff, sizeof(buff)))
	{
		cout << "buff=" << buff << endl;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

2.3 单个字符方式读取get()

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return 0;
	}
	//第三种:单个字符方式读取
	char c;
	while ((c = ifs.get()) != EOF)
	{
		cout << c;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

4.二进制方式读写示例

  • 二进制数据写入文件
函数:write(const _Elem* _Str, streamsize _Count)
 形参:_Str --写入的内容的起始地址
       _Count  --写入的字节数
  • 二进制数据读取文件
read(_Elem* _Str, streamsize _Count) ;
 形参:_Str --读取内容存放缓冲区
       _Count --要读取的字节数
#include < iostream >
#include < fstream >
#include < cstring >
using namespace std;
class Person
{
public:
	Person() {}
	Person(const char* name, int age)
	{
		strcpy_s(this->name, name);
		this->age = age;
	}
	char name[20];//姓名
	int age;//年龄
};
int main()
{
	/*二进制写入数据示例*/
	fstream fs("test.doc", ios::out | ios::binary);
	if (!fs.is_open())
	{
		cout << "文件创建失败" << endl;
		return 0;
	}
	Person p("小王", 18);
	fs.write((const char *) & p, sizeof(p));//写入内容
	fs.close();//关闭文件
	/*二进制读取数据示例*/
	fs.open("test.doc", ios::in | ios::binary);
	if (!fs.is_open())
	{
		cout << "文件打开失败" << endl;
		return 0;
	}
	Person p2;
	fs.read((char *) & p2, sizeof(p2));
	cout << "读取的内容:" << endl;
	cout << "姓名:" << p2.name < < "t年龄:" << p2.age << endl;
	fs.close();
	system("pause");

}

5.C++文件指针偏移

//C++文件指针偏移
  seekg(pos_type _Pos,ios_base::seekdir _Way)  --用于输入流,偏移位置指针到指定位置
  seekp(pos_type _Pos,ios_base::seekdir _Way)  --用于输出流,偏移位置指针到指定位置
	第一个参数:偏移量
	第二个参数:基于哪个位置
				ios::beg  --文件头
				ios::end  --文件尾
				ios::cur  --当前位置
  streamoff tellg()  --用于输入流,返回当前指针位置,streamoff 是一个long long类型
  streamoff tellp()  --用于输出流,返回当前指针位置
  返回值返回基于文件头的偏移量,字节为单位。失败则返回-1
  • 示例:
#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream fs;
	fs.open("test.txt", ios::in );//打开文件,不存在则打开失败,不会截断原内容
	if (!fs.is_open())
	{
		cout << "文件打开失败" << endl;
		return 0;
	}
	fs.seekg(0,ios::end);//将文件指针偏移到文件末尾
	char buff[1024];
	streamoff  size = fs.tellg();//获取文件大小
	cout << "文件大小:" << size << "字节" << endl;
	fs.seekg(0, ios::beg);//将输入流偏移到文件头
	while (fs >> buff)
	{
		cout << buff << endl;
	}
	fs.close();
	system("pause");
	return 0;
}

在这里插入图片描述

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

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

相关文章

Spring系列一:spring的安装与使用

文章目录 &#x1f49e; 官方资料&#x1f34a;Spring5下载&#x1f34a;文档介绍 &#x1f49e;Spring5&#x1f34a;内容介绍&#x1f34a;重要概念 &#x1f49e;快速入门&#x1f34a;Spring操作演示&#x1f34a;类加载路径&#x1f34a;Debug配置&#x1f34a;Spring容器…

基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

目录 一、添加硬盘 二、查看新磁盘 三、磁盘分区 3.1新建分区 3.2 格式分区 3.3 挂载分区 3.4 永久挂载新分区 3.5 取消挂载分区 一、添加硬盘 1.在虚拟机处选择编辑虚拟机设置&#xff0c;然后选择添加 2.选择硬盘&#xff0c;然后选择下一步 3.默认即可&#xff0c;下一步…

啤酒节,燃起青岛啤酒们的“热血”

【潮汐商业评论/ 原创】 “这周五晚上我们就出发&#xff01;三年了&#xff0c;终于可以再去啤酒节畅快淋漓了&#xff01;”作为啤酒爱好者Joe兴奋道。 随着线下经济的复苏&#xff0c;疫情后的第一个盛夏正在被全国各地的“啤酒狂欢”所点燃。 7月14日晚&#xff0c;随着…

Canal安装部署与测试

文章目录 第一章 Canal概述1.1 简介1.2 工作原理1.2.1 MySQL主备复制原理1.2.2 canal 工作原理 1.3 重要版本更新说明1.4 多语言 第二章 Canal安装部署2.1 准备2.2 canal安装 第三章 Canal和Kafka整合测试注意事项 第一章 Canal概述 Github地址&#xff1a;https://github.com…

脑电信号处理与特征提取——4.脑电信号的预处理及数据分析要点(彭微微)

目录 四、脑电信号的预处理及数据分析要点 4.1 脑电基础知识回顾 4.2 伪迹 4.3 EEG预处理 4.3.1 滤波 4.3.2 重参考 4.3.3 分段和基线校正 4.3.4 坏段剔除 4.3.5 坏导剔除/插值 4.3.6 独立成分分析ICA 4.4 事件相关电位&#xff08;ERPs&#xff09; 4.4.1 如何获…

Java子类可以继承父类的所有属性吗

子类可以继承父类的所有属性吗 答案&#xff1a; 不可以&#xff0c;当然是不可以全部属性和方法都继承&#xff0c;那么哪些不可以继承&#xff1f; 最起码私有的就不可以&#xff0c;私有的属性和方法都不可以&#xff0c;其他的那就需要继续去测试了。 我用的是jdk1.8来…

Docker 的数据管理、镜像的创建

Docker 的数据管理、镜像的创建 Docker 的数据管理1&#xff0e;数据卷2&#xff0e;数据卷容器端口映射容器互联&#xff08;使用centos镜像&#xff09; Docker 镜像的创建1&#xff0e;基于现有镜像创建&#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改…

使用docker 部署自己的chatgpt

直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…

拆解雪花算法生成规则 | 京东物流技术团队

1 介绍 雪花算法&#xff08;Snowflake&#xff09;是一种生成分布式全局唯一 ID 的算法&#xff0c;生成的 ID 称为 Snowflake IDs 或 snowflakes。这种算法由 Twitter 创建&#xff0c;并用于推文的 ID。目前仓储平台生成 ID 是用的雪花算法修改后的版本。 雪花算法几个特性…

体验百度大模型文心千帆有感

大家好&#xff0c;我是雄雄&#xff0c;微信公众号&#xff1a;雄雄的小课堂&#xff0c;欢迎关注。 前言 近段时间来&#xff0c;各种大厂都推出了自己的大模型平台&#xff0c;有讯飞星火大模型、百度文心大模型、阿里通义千问大模型、claude、还有openai公司出产的chatgpt…

基于so-token的前后端分离项目 + uni-app微信小程序

PC端效果&#xff1a; 移动端效果&#xff1a; Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 uni-app 是一个使用 Vue.js 开发所有前端应用的…

合并二叉树

给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠&#…

荧光粉的发光效率是多少?--光致发光量子效率检测系统

稀土荧光粉广泛应用于生态照明、动态显示、通讯卫星、光学计算机及生物分子探针等高科技领域。三基色荧光粉是目前最有研究价值的荧光粉&#xff0c;其在可见光区具有丰富的谱线&#xff0c;发光谱带狭窄&#xff0c;发光能量更为集中&#xff1b;具有较强的抗紫外辐照能力&…

用户认证模式Cookie-Session、JWT-Token(goland实现)

用户认证 Cookie-Session认证模式简介代码示例优缺点 Token认证模式简介JWT介绍JWT结构标头&#xff08;Header&#xff09;负载&#xff08;Payload&#xff09;签名&#xff08;Signature&#xff09; 代码示例JWT优缺点Access Token和Refresh Token认证模式代码示例 在计算机…

解决QT 编译qmake 无法找到问题

问题&#xff1a; Command qmake not found, but can be installed with: sudo apt install qtchooser 原因&#xff1a; 这个错误提示指出在当前环境中找不到 qmake 命令 解决方法&#xff1a; 其实ubuntu已经给提示了就是要安装qtchooser 安装命令为&#xff1a; sudo…

Springboot中 AOP实现日志信息的记录到数据库

1、导入相关的依赖 <!--spring切面aop依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 注意&#xff1a;在application.properties文件里加这样一…

串2:云计算架构思考

开始之前&#xff0c;先给出串1&#xff1a;一文将大数据、云计算、物联网、5G&#xff08;移动网&#xff09;、人工智能等最新技术串起来_龙赤子的博客-CSDN博客 承上 事物的复杂性一般有两个方面&#xff0c;一个是本身结构的复杂&#xff0c;一个是运行机制的复杂。因为这…

如何判断某个视频是深度伪造的?

目录 一、前言 二、仔细检查面部动作 三、声音可以提供线索 四、观察视频中人物的身体姿势 五、小心无意义的词语 深造伪造危险吗&#xff1f; 一、前言 制作深度伪造视频就像在Word文档中编辑文本一样简单。换句话说&#xff0c;您可以拍下任何人的视频&#xff0c;让他…

Java 使用 Google Guava 实现接口限流

一、引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version> </dependency>二、自定义注解及限流拦截器 自定义注解&#xff1a;Limiter package com.haita…

更省更快更安全的云服务器,一站式集中管理,随时随地远程——站斧云桌面

随着全球化和数字化经济的发展&#xff0c;越来越多的企业开始海外扩张和拓展国际市场。而云服务器作为一种高效、灵活且可靠的IT基础设施方案&#xff0c;已成为出海企业不可或缺的重要工具。这里就为大家介绍云服务器在出海企业中的几个使用场景。 1.全球范围内协同办公 对…