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