You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
6.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#ifndef AFX_EXT_CLASS
#define AFX_EXT_CLASS Q_DECL_IMPORT
#endif
//#include "SplitPath.h"
namespace GBase
{
//为了自动释放申请的内存
class AFX_EXT_CLASS CStringBuffer
{
public:
CStringBuffer(LPCTSTR strData = NULL);
virtual ~CStringBuffer();
void SetData(CString strData); //初始化设置数据串
void AddData(CString strData); //继续增加数据串
void AddData(char cAdd, int nCount); //增加指定的字符到数据串中,为了扩展'\0'增加
void AddData(char* pAdd, int nNum); //增加指定的字符串到数据中
void Attach(char* pBuffer, int nLength);
char* Detach(void); //返回数据指针将内部置空返加的指针需要使用delete删除
void Clear();
char* GetData() { return m_pData; }
int GetLength() { return m_nNum; }
operator char* (void) const { return m_pData; }
char& operator[](int idx) { return m_pData[idx]; }
char operator[](int idx) const { return m_pData[idx]; }
//获得以回车结束的一行文本,返回下一行的开始
int GetNextLine(CString& strLine, int nBeginIndex = 0);
CString Mid(int nBegin, int nCount = -1);
int Create(int nNum);
int AppendCreate(int nAddNum);
private:
int m_nNum;
char* m_pData;
};
//操作CFile类
class AFX_EXT_CLASS IOFile
{
public:
IOFile(CFile* pFile = NULL, BOOL bDelete = FALSE);
virtual ~IOFile(void);
BOOL GetStatus(CFileStatus& rStatus) const;
virtual CString GetFileName() const;
virtual CString GetFileTitle() const;
virtual CString GetFilePath() const;
virtual void SetFilePath(LPCTSTR lpszNewName);
virtual void Close(void);
#ifndef _QT_VERSION
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM, CFileException* pError);
#else
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags);
#endif //_QT_VERSION
virtual UINT Read(void* lpBuf, UINT nCount);
virtual void Write(const void* lpBuf, UINT nCount);
virtual void SeekToBegin();
virtual ULONGLONG SeekToEnd();
virtual ULONGLONG Seek(LONGLONG lOff, UINT nFrom);
virtual ULONGLONG GetPosition();
virtual ULONGLONG GetLength();
virtual void SetLength(ULONGLONG dwNewLen);
//设置、获取文件指针
//virtual void SetFile(CFile* pFile) { m_pFile=pFile; }
virtual CFile* GetFile() { return m_pFile; }
public:
//ASCII码文件的读写
int ReadString(CString& str);
int GetString(CString& str);
int ReadString(char* str, int nMaxLength); //读取一行字符串
int GetString(char* str, int nMaxLength); //读取一段字符串(以空格或回车为终止符)
int ReadLine() { return ReadString(); } //读取一行字符串到临时数组中(任意长度,内部自动扩展缓存)
int ReadString(); //读取一行字符串到临时数组中(任意长度,内部自动扩展缓存)
int GetString(); //读取一段字符串(以空格或回车为终止符)到临时数组中
char* GetTempString(void); //获得临时数组
int GetTempStringLength(void); //获得临时数组长度
void ZeroTempString(void); //清空临时数组
CStringBuffer& GetTempBuffer() { return m_tempBuffer; }
void WriteChar(LPCTSTR lpstr, int nTimes = 1); //写入nTimes次字符串进文件
void WriteLine(LPCTSTR lpstr, int nTabNum); //进行nTabNum次tab操作再写一行字符串
void WriteLine(CString str); //写一行数据(包括回车),是WriteString与WriteReturn的组合
void WriteString(CString str, int nTabNum = 0); //写一串数据
void WriteString(double value, int n = 6); //写一个双精度数据
void WriteString(long value); //写一个长整形数据
void WriteReturn(); //写一个回车
void WriteXY(double x, double y, char cSplit = ','); //写X,Y数据
int ReadXY(double& x, double& y, char cSplit = ',');
void WriteXY(double x, double y, double z, char cSplit = ',');
int ReadXY(double& x, double& y, double& z, char cSplit = ',');
void WriteArray(int num, double* pValue, char cSplit = ' ');
//输出数组到字符串中,用户可以自定义间隔符号(缺省是‘,’)
void PrintXYZ(char* string, double *v, int num, int digits, char split = ',');
void PrintXYZ(CString& result, double *v, int num, int digits, char split = ',');
void PrintXYZ(char* result, double *v, int num, char split = ',');
void PrintXYZ(CString& result, double *v, int num, char split = ',');
//快速保存指定内容
BOOL WriteFile(LPCTSTR lpSaveFileName, void* pBuffer, DWORD nBufferSize);
//二进制dfb文件读写
void SerializeString(CArchive& ar, CString& str, const short& ver);
void WriteElementType(CArchive& ar, int nType, const short& ver); //写元素类型(int 或 short)型
void ReadElementType(CArchive& ar, int &nType, const short& ver); //读元素类型(int 或 short)型
////读写二进制内存块
//int DFD_WriteMemoryBlock(CDFile& fw, BYTE* lpData, DWORD nDataLength, LPCTSTR strType);
//BYTE* DFD_ReadMemoryBlock(CDFile& fr, DWORD& nOutDataLength, CString& strType);
////xml格式写
//void WriteDML(CRect8& rect,int nTabNum, CString key=_T(""));
//void WriteDML_Head_Version();
//void WriteDML_Head_Xmlns();
//void WriteDML_Head_MapType(int nTabNum, CString strMapType);
//void WriteDML_Tail_MapType(int nTabNum, CString strMapType);
//void WriteDML_Tail(short ver);
//void WritePCG(const CRect8& rect,int nTabNum, CString key=_T(""));
//void WritePCG_Head_Version();
//void WritePCG_Head_Xmlns();
//void WritePCG_Head_MapType(int nTabNum, CString strMapType);
//void WritePCG_Tail_MapType(int nTabNum, CString strMapType);
//void WritePCG_Tail(short ver);
//编码
void ConvertGBKToUTF8(CString& strGBK, bool checkCodec = true);
void SetCodeType(DWORD nType);
DWORD GetCodeType();
//xml格式版本号
void SetXmlVersion(double dVer);
double GetXmlVersion();
//获得设置临时错误信息
void SetErrorInfo(LPCTSTR lpszErrorInfo);
CString GetErrorInfo(void);
enum ECodeType
{
codeGB2312 = 0x00000000, //gb2312编码与CODE_GB2312相同
codeUTF8 = 0x00000001 //utf-8编码与CODE_UTF8相同
};
protected:
CFile* m_pFile;
BOOL m_bDelete; //是否删除m_pFile
double m_dXmlVersion; //版本号
DWORD m_nCodeType; //编码类型
CString m_strErrorInfo; //临时保存的错误信息
//为了适应任意长度的一行文本,改为变长串
CStringBuffer m_tempBuffer; //每行文件内容, 初始化为2048个
};
};
using namespace GBase;