⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 virtualinfofile.h

📁 mcgs的数据导出源代码
💻 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 + -