|
|
#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; |