📄 virtualinfofile.h
字号:
// VirtualInfoFile.h: interface for the CVirtualInfoFile class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_VIRTUALINFOFILE_H__4A44B835_62F3_4664_A039_B7D3D5969050__INCLUDED_)
#define AFX_VIRTUALINFOFILE_H__4A44B835_62F3_4664_A039_B7D3D5969050__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "virtualsavefile.h"
#include "OwnerArchive.h" //硫化文件
//lzlzlz
#define MCGS_READFILE_BUFFERSIZE 20
typedef struct READFILE_BUFFER
{
CVirtualSaveFile* m_pFile; //指向文件缓存
short m_iPos; //在arrayInfo中的位置(0-based)
READFILE_BUFFER()
{
m_pFile = NULL;
m_iPos = 0;
}
~READFILE_BUFFER()
{
m_pFile = NULL;
}
}RFILEBUFFER;
class COwnerArchive;
class CVirtualSaveStruct
{
public:
CString m_strGroupObjName;//组对象的名字
CString m_strDataSavePath;//存盘路径
BOOL m_bValid;//标记本信息是否有效
CString m_strFileName;
MCGSDATETIME m_timeStart;
MCGSDATETIME m_timeEnd;
COleDateTime SvrGetStartTime()
{
return COleDateTime(m_timeStart);
};
COleDateTime SvrGetEndTime()
{
return COleDateTime(m_timeEnd);
};
CVirtualSaveStruct();
~CVirtualSaveStruct();
CVirtualSaveFile* SvrCreateSaveFile(CVirtualInfoFile* pInfoFile,BOOL bLoadFromExistFile = FALSE);
void Serialize(COwnerArchive& ar);
};
//lzlzlz
//读盘和记录输出顺序style
#define MCGS_READDATA_N2O 0x0001 //逆序读(从新文件到旧文件)
#define MCGS_READDATA_O2N 0x0002 //顺序读(从旧文件到新文件)
#define MCGS_READDATA_ASC 0x0004 //升序输出(新的记录在后)
#define MCGS_READDATA_DEC 0x0008 //降序输出(新的记录在前)
#define MCGS_READDATA_ONLYCOUNT 0x0010 //只统计记录数目
//lzlzlz 2003.6.16
#define MCGS_DELDATA 0x0020 //删除给定时间范围内的数据(以文件为单位)
//lzlzlz 2003.6.24
#define MCGS_READDATA_SECOND 0x0040 //获取数据精确到秒
#define MCGS_READDATA_MSECOND 0x0080 //获取数据精确到毫秒(给定端点的毫秒数,如果为零,当作精确到秒来处理)
class CVirtualDBQuery;
class CVirtualInfoFile
{
friend class CVirtualFileDataBaseEx;
private:
int mfGetCurReadFileInfo();
int mfStoreCurSaveFileInfo();
//CFile m_File;
//CFile m_FileEx;
CVirtualSaveFile *m_pCurSaveFile;
CVirtualSaveFile *m_pCurReadFile;
//CArray<CVirtualSaveFile*, CVirtualSaveFile*> m_arraySaveFile;
//lzlzlz
public:
MCGSDATETIME m_timeStart;
MCGSDATETIME m_timeEnd;
CString m_strFileName;
DATAOBJSINFO m_GrpObjInfo; //组对象包含的成员对象信息
static long m_iTotalReadRecords; //读取记录的总数(一个组对象)
static long m_iRequiredRecords; //存盘数据浏览的需要读取的记录数目
//历史曲线的时间间隔(目前只用于历史曲线)
static float m_fStep;
static WORD m_wInvRead; //逆序读取数据(先获取最新的记录)
//指定时间范围内的最新记录的时间
//目前,该参数只用于存盘数据浏览
static COleDateTime m_tIniEndTime;
static enum EXSTATUS{MCGS_FORHISPIC = 0, MCGS_FORSAVEDATA,
MCGS_FORHISGRID}m_exStatus;
static bool SvrIsStopGettingData()
{
if((CVirtualInfoFile::m_wInvRead & MCGS_READDATA_ONLYCOUNT) ==
MCGS_READDATA_ONLYCOUNT)
{
//当只获取记录数目时,该条件失效
return false;
}
if(m_iTotalReadRecords >= m_iRequiredRecords)
{
//已经获取了需要的记录数目,停止获取
return true;
}
return false;
}
//lzlzlz 2003.6.24
//查询记录过滤(由查询方分配和释放)
static CVirtualDBQuery* m_pDBQuery;
CString mfGetUniqueFileName();
DWORD mfFindOldRec( CFile& file );
DWORD mfGetLength();
public:
FILE_ERROR CVirtualInfoFile::SvrLoadSaveFile();
CArray<CVirtualSaveStruct,CVirtualSaveStruct> m_arraySaveInfo;
CVirtualInfoFile( CString strFileName );
virtual ~CVirtualInfoFile();
FILE_ERROR SvrQueryLastSaveTime( COleDateTime& time );
FILE_ERROR SvrNetDBReadData( CString& strName, COleDateTime& tBegin, BYTEARRAY& buff);
//lzlzlz
//多个读取文件缓存版本
FILE_ERROR SvrGetDBDataEx( CString strGroupName,
STRINGARRAY& arrayFieldNames,
COleDateTime& tBegin,
COleDateTime& tEnd,
CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*>& listValueBuffer
);
long mfGetDBDataCore( int i, int iPos, CString strGroupName,
STRINGARRAY& arrayFieldNames,
COleDateTime& tBegin,
COleDateTime& tEnd,
CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*>& listValueBuffer
);
CString SvrGetFileName(){return m_strFileName;}
//CVirtualSaveFile* SvrCreateNewSaveFile(CString strFileName, MCGSDATETIME timeStart = COleDateTime(9999, 1, 1, 0, 0, 0), COleDateTime timeEnd = COleDateTime(1900, 1, 1, 0, 0, 0) );
//lzlzlz
CVirtualSaveFile* SvrCreateNewSaveFile(CString strFileName, MCGSDATETIME timeStart = MCGS_MAXDATETIME, MCGSDATETIME timeEnd = MCGS_MINDATETIME);
void mfClear();
//lzlzlz 2003.6.16
//以文件为单位删除数据
void mfDelDataByFile(COleDateTime tBegin, COleDateTime tEnd);
FILE_ERROR mfAutoDelDataByFile(float fPercent);
// add by dagger 2003.3.3 for last space
BOOL SvrDeleteForSpace();
//lzlzlz
// void SvrSetSelIDs(INTARRAY& selIDs){ m_GrpObjInfo.SetSelIDs(selIDs); }
// INTARRAY& SvrGetSelIDs(){ return m_GrpObjInfo.m_SelIDs; }
friend class CVirtualSaveFileBlock;
friend class CVirtualSaveFile;
long m_lDataStorageFreeSpace;
};
//lzlzlz 2003.6.24 {
//用于实现简单的记录查询的基类,比如:时间条件,字段条件等
class CVirtualDBQuery
{
public:
CVirtualDBQuery(COleDateTime tBegin = COleDateTime(1971,1,1,0,0,0),
COleDateTime tEnd = COleDateTime(3000,1,1,0,0,0),
long tBeginMs = 0, long tEndMs = 0, DWORD dwStyle = MCGS_READDATA_SECOND);
//前过滤(未获取数据对象信息前,只获取了时间信息)
virtual bool SvrPrepare(COleDateTime tCur, long lMSCur);
//后过滤(获取了数据对象信息)
virtual bool SvrDone(COleVariant* pVars){ return true; };
void operator=(CVirtualDBQuery& query)
{
m_tBegin = query.m_tBegin;
m_tEnd = query.m_tEnd;
m_lBeginMs = query.m_lBeginMs;
m_lEndMs = query.m_lEndMs;
m_dwStyle = query.m_dwStyle;
}
public:
COleDateTime m_tBegin;
COleDateTime m_tEnd;
long m_lBeginMs;
long m_lEndMs;
COleDateTime m_tLast; //上一条有效记录的时间
DWORD m_dwStyle; //过滤风格
private:
double m_dtBegin;
double m_dtEnd;
friend class CAsyncGetBackupData;
};
//lzlzlz 2003.6.24 }
#endif // !defined(AFX_VIRTUALINFOFILE_H__4A44B835_62F3_4664_A039_B7D3D5969050__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -