工具类库系列(十四)-FileData

2023-11-14

第十四个工具类:FileData


用于文本文件读取/保存,以及在内存中修改文本文件内容。


读取:ifstream

保存:ofstream

修改内容:以string类型,获取/设置,文本文件内容


最大支持文件大小1M


上代码:

FileData.h

#ifndef __FileData_h__
#define __FileData_h__

#include <string>

namespace common{
	namespace tool{

		class FileData
		{
		public:
			FileData();
			FileData(const FileData& other);
			~FileData();

			FileData& operator=(const FileData& other);

			// 提取文本文件内容,将文本中内容下标为[begin, end]之间(包括)的字符,提取到data中
			void GetData(std::string& data, unsigned int begin, unsigned int end);
			// 设置文本文件内容,用data中内容,替换掉文本中内容下标为[begin, end]之间(包括)的字符
			void SetData(const std::string& data, unsigned int begin, unsigned int end);

			// 获取文本文件内容长度
			unsigned int GetLen();
			// 设置文本文件内容长度
			void SetLen(unsigned int len);

			// 读取/保存文本文件
			void Load(const std::string& fileName);
			void Save(const std::string& fileName);

			// 文本数据最大支持1M
			static const unsigned int MaxDataLen = 1024 * 1024;

		private:
			unsigned int m_DataLen;
			char m_Data[MaxDataLen];
		};

	}
}

#endif

FileData.cpp

#include "FileData.h"

#include <string.h>
#include <fstream>

namespace common{
	namespace tool{

		FileData::FileData()
		{
			m_DataLen = 0;
		}
		FileData::FileData(const FileData& other)
		{
			*this = other;
		}
		FileData::~FileData()
		{

		}

		FileData& FileData::operator=(const FileData& other)
		{
			m_DataLen = other.m_DataLen;
			memcpy(m_Data, other.m_Data, other.m_DataLen);

			return *this;
		}

		void FileData::GetData(std::string& data, unsigned int begin, unsigned int end)
		{
			if (begin <= end && end < MaxDataLen)
			{
				data.assign(m_Data + begin, end - begin + 1);
			}
		}

		void FileData::SetData(const std::string& data, unsigned int begin, unsigned int end)
		{
			if (begin <= end && end < MaxDataLen && (end - begin + 1) <= data.length())
			{
				memcpy(m_Data + begin, data.c_str(), end - begin + 1);

				if (m_DataLen < end + 1)
				{
					m_DataLen = end + 1;
				}
			}
		}

		unsigned int FileData::GetLen()
		{
			return m_DataLen;
		}

		void FileData::SetLen(unsigned int len)
		{
			m_DataLen = len;
		}

		void FileData::Load(const std::string& fileName)
		{
			std::ifstream file;
			file.open(fileName.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
			if (file)
			{
				m_DataLen = static_cast<unsigned int>(file.tellg());
				if (m_DataLen <= MaxDataLen)
				{
					file.seekg(0, std::ios::beg);
					file.read(m_Data, m_DataLen);
				}
				file.close();
			}
		}

		void FileData::Save(const std::string& fileName)
		{
			std::ofstream file;
			file.open(fileName.c_str(), std::ios::out | std::ios::trunc | std::ios::binary);
			if (file)
			{
				file.write(m_Data, m_DataLen);
				file.flush();
				file.close();
			}
		}

	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工具类库系列(十四)-FileData 的相关文章

  • 【Unity InputSystem】基础教程(保姆级超详细超基础!!!)

    InputSystem基础教程 1 基础概念 1 1 前言 2 基础操作 2 1插件安装 2 2 如何创建InputActions 2 3 InputActions概念及结构关系 ActionMaps Actions ActionPrope
  • Disentangled Representation:IVIF

    DRF Disentangled Representation for Visible and Infrared Image Fusion DRF 可见光和红外图像融合的解纠缠表示 在本文中 我们通过将 解纠缠表示 应用于可见光和红外图像融
  • ssh登录一直提示修改密码解决

    用SSH登录就会出现用户登录失败 提示诸如 WARNING Your password has expired You must change your password now and login again 等等 在开发板手工修改 大致
  • java调用c++文件

    网上有很多例子 参照着执行有时候相对路径问题经常卡住了 实战了一把通过后 特重新整理一份 供小白参考 首先需要有一个含有native方法的java类 vi Users mac work git javademo src main java
  • 一点整理

    1 美国在2010年以后开始流行数字化转型的 在2010年以前 2006年社交网络FB YOU 在2004 2006 Web2 0热之前 企业是无法直接触达到每个消费者的 2006年Amazon电子商务 这个是我瞎凑的 但因为是在线交易所以

随机推荐

  • 入门Python必备100道练习题

    给大家整理了这份今天给大家分享100道Python练习题 在此之前 先给大家推荐一个工具 是一个对 Python 运行原理进行可视化分析的工具 Python Tutor 点击 Next 按钮就会根据执行步骤显示原理 对新手理解代码运行原理有
  • C++day01

    一 C 简介 本贾尼 斯特劳斯特卢普 于1979年4月在贝尔实验室负责分析UNIX系统的内核的流量情况 希望有一款更加模块化的工具 于1979年10月开始着手开发一种新的编程语言 在C语言的基础上增加了面向对象机制 这就是C 的来历 在19
  • 从量子物理到AI医疗,这位清华博士后想用十年弥补病理医生的"百年缺口"

    大数据文摘出品 作者 易琬玉 根据WHO下属 国际癌症研究机构 公布的最新全球癌症数据报告 2018年全球新增癌症诊断病例约1910万 死亡病例约960万 约1 5男性和1 6女性在一生中会罹患癌症 1 8男性和1 11女性因癌症而死亡 对
  • 安全应急响应案例

    1 产生背景 1988年11月发生的莫里斯蠕虫病毒事件 Morris Worm Incident 致使当时的互联网络超过10 的系统不能工作 该案件轰动了全世界 并且在计算机科学界引起了强烈的反响 为此 1989年 美国国防部高级研究计划署
  • linux系统ipcclean命令,Linux学习笔记29——IPC状态命令

    一 IPC IPC是进程间通讯 在前面 我们相继学习了进程间通讯机制有信号量 内存共享 消息队列 状态命令 ipcs 和删除命令 ipcrm 提供了一种检查和清理IPC机制的方法 二 状态命令 1 显示信号量状态用ipcs s 2 显示共享
  • 华为OD机试真题- 狼羊过河【2023Q2】【JAVA、Python、C++】

    题目描述 一农夫带着m只羊 n只狼过河 农夫有一条可载x只狼 羊的船 农夫在时或者羊的数量大于狼时 狼不会攻击羊 农夫在不损失羊的情况下 运输几次可以完成运输 返程不计入次数 输入描述 输入参数为 m n x m 为羊的数量 n为狼的数量
  • nodeJS入门(四)之身份验证

    身份验证 一 bcrypt模块 1 1 简单介绍一下 1 2 安装 1 3 加密 二 身份验证 2 1 session 会话 2 1 1 session实现身份验证的思路 2 1 2 session的业务流程 2 1 3 express s
  • QT学习总结

    转眼间工作已经三个月了 实习期也已经满了 在这三个月中 对qt的学习遇到了很多问题 也解决了很多问题 也留下了一些现在的未解之谜 在工作中关于qt的一些东西也需要进行一些记录 QT Creator对大于带有两个空格的目录和中文命名的目录不支
  • cv2.error: OpenCV(4.6.0) /io/opencv/modules/imgcodecs/src/grfmt_exr.cpp:103: error

    问题描述 cv2 error OpenCV 4 6 0 io opencv modules imgcodecs src grfmt exr cpp 103 error 213 The function feature is not impl
  • 数据库服务器配置参数修改,数据库服务器参数配置

    数据库服务器参数配置 内容精选 换一换 云搜索服务 Cloud Search Service 为用户提供结构化 非结构化文本的多条件检索 统计 报表 本章节介绍如何通过CDM将本地Elasticsearch整库迁移到云搜索服务中 流程如下
  • 如何在GitHub的repository中建立文件夹

    GitHub的repository无法直接建立文件夹 需要曲线建立 第一步 创建新的repository 若已有repository可直接将其打开 第二步 在repository界面右上角选择创建新文件 create new files 不
  • 费曼技巧学习笔记

    博主狂言 技巧正文 技巧的详细步骤 技巧步骤一 技巧步骤二 技巧步骤三 技巧的提纲总结 费曼技巧可以解决的问题 费曼技巧的另一种描述四步学习法 步骤一 步骤二 步骤三 步骤四 博主读后感 博主狂言 初识费曼技巧 甚是熟悉 博主自认有那么一点
  • 基于Springboot实现Kafka消费数据

    本文介绍使用Kafka监听和订阅两种不同方式进行数据消费 1 配置文件 spring kafka bootstrap servers 192 168 1 16 9092 消费者 consumer group id alarmService
  • MySQL check table/optimize table/analyze table/REPAIR TABLE

    check table 检查InnoDB和MyIsam是否有错误 检查表或者视图是否存在错误 对 MyISAM 和 InnoDB 存储引擎的表有作用 对于 MyISAM 存储引擎的表进行表检查 也会同时更新关键字统计数据 CHECK TAB
  • 《ios零基础教程》-- ”Mac OS X的介绍”和一些“基础语法” 2014-3-18总结

    一 学前须知 讲的ios和c语言的一些发展历史 作为了解即可 二 Mac OS X简单介绍 讲的是对苹果电脑的一些操作和基础了解 感觉蛮有用的 以前都是用的windows 突然用这种高富帅装备 还真不习惯 装个软件都费劲 看了这个之后 对m
  • 1 Centos7安装(jdk8)Tomcat9并设置为开机启动

    一 安装过程 cd usr local src wget http mirrors hust edu cn apache tomcat tomcat 9 v9 0 12 bin apache tomcat 9 0 12 tar gz 可以下
  • 面试余额宝Java技术岗(1-4面题目):GC+spring+二叉树+Dubbo+线上调优+​​​​数据库索引+mq

    余额宝一面 JVM 内存分哪几个区 每个区的作用是什么 JVM有哪些回收算法 对应的收集器有哪些 GC 的两种判定方法 CMS 收集器与 G1 收集器的特点 hashmap源码问题 HashMap HashMap如何保证线程安全 Concu
  • Aix6.1下安装SWFTools

    该文章参考http tech sxinfo net jctj article do curMenu 14 childMenu 16 articleId 388 再结合我在实际上在Aix6 1上的安装经验来编写 相关文件的下载 ftp ftp
  • Linux 同步工具rsync 文件目录同步,增量备份的手段之一

    一 rsync介绍 rsync是linux系统下的数据镜像备份工具 使用快速增量备份工具Remote Sync可以远程同步 支持本地复制 或者与其他SSH rsync主机同步 它的特性如下 可以镜像保存整个目录树和文件系统 可以很容易做到保
  • 工具类库系列(十四)-FileData

    第十四个工具类 FileData 用于文本文件读取 保存 以及在内存中修改文本文件内容 读取 ifstream 保存 ofstream 修改内容 以string类型 获取 设置 文本文件内容 最大支持文件大小1M 上代码 FileData