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

第十四个工具类: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();
			}
		}

	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值