📄 virtualinfofile.cpp
字号:
}
}
//删除掉不正常的info数据
RESTART:
for (int i = 0; i < ARRAYSIZE(m_arraySaveInfo); i++ )
{
if(m_arraySaveInfo[i].m_bValid == FALSE)
{
m_arraySaveInfo.RemoveAt(i);
goto RESTART;
}
}
return S_FILE_OK;
}
CVirtualSaveFile* CVirtualInfoFile::SvrCreateNewSaveFile(
CString strFileName,
MCGSDATETIME timeStart,
MCGSDATETIME timeEnd )
{
CVirtualSaveStruct c;
c.m_strFileName = strFileName;
c.m_timeEnd = timeEnd;
c.m_timeStart = timeStart;
m_arraySaveInfo.Add(c);
CVirtualSaveFile* pFile = c.SvrCreateSaveFile (this);
return pFile;
}
FILE_ERROR CVirtualInfoFile::SvrLoadSaveFile( )
{
//首先试图从SysInfo.dat里读取,如果没有,就认为这是
//一个老工程,从文件读取。
CString strPath ;//= McgsGetPath( m_strFileName );
CString strVar;// = McgsGetFileName( m_strFileName );
CString strName ;//= McgsGetFileNameEx( m_strFileName );
CString strBakFile ;//= strPath + _T("\\") + strVar + _T("\\") + strName;
CString strFileName = _T("d:\\ph\\MCGS_DATE.ini");
BYTEARRAY buff; //一次性从文件中装载完数据
TRY
{
CFile file;
if( !file.Open( strFileName, CFile::modeRead ) )
return S_FILE_READ_FAIL;
DWORD buffer_size = 0;
buff.SetSize( (long)file.GetLength() );
file.Read( buff.GetData(), buff.GetSize() );
// 读数据
file.Close();
}
CATCH( CFileException, e )
{
e->Delete();
TRACE( _T("file %s--%s open fail\n"), m_strFileName, strBakFile );
return S_FILE_READ_FAIL;
}
END_CATCH
{
CByteArray dataBuff;
//lzlzlz 2003.6.16
COwnerArchive ar(COwnerArchive::storing);
ar.SvrWrite (buff);
ar.SvrSeekToBegin ();
ar.SvrChangeMode (COwnerArchive::load);
int size;
ar >> size;
for (int i=0; i<size;++i)
{
//得到组对象成员类型
int iNum;
ar >> iNum;
for (int j=0;j<iNum;++j)
{
ar >> m_GrpObjInfo[j].m_type;
}
ar >> m_timeEnd;
ar >> m_timeStart;
DWORD dwSize = 0;
ar >> dwSize;
m_arraySaveInfo.SetSize(0);
for (DWORD i = 0 ; i < dwSize ; i ++)
{
CVirtualSaveStruct c;
// c.m_strGroupObjName = McgsGetFileName(m_strFileName);
// c.m_strDataSavePath = McgsGetPath(m_strFileName);
c.Serialize (ar);
m_arraySaveInfo.Add(c);
}
}
}
if( ARRAYSIZE(m_arraySaveInfo) > 0 )
{
m_pCurSaveFile = m_arraySaveInfo[ ARRAYSIZE(m_arraySaveInfo) - 1 ].SvrCreateSaveFile(this);
if(NULL != m_pCurSaveFile)
{
//penghong add 为了修改从info读取的时间04-5-29
MCGSDATETIME timestart,timeend;
timestart = m_pCurSaveFile->SvrGetStartTime();
timeend = m_pCurSaveFile->SvrGetEndTime();
if ( m_timeStart > timestart ) m_timeStart = timestart;
if ( m_timeEnd < timeend ) m_timeEnd = timeend;
//penghong add 为了修改从info读取的时间04-5-29
}
else
{
int iIndex = ARRAYSIZE(m_arraySaveInfo) - 1;
ARRAYREMOVE(m_arraySaveInfo,iIndex);
}
}
return S_FILE_OK;
}
DWORD CVirtualInfoFile::mfFindOldRec( CFile& file )
{
BYTEARRAY buff;
DWORD dwSize = file.GetLength();
ARRAYRESIZE( buff, (long)dwSize );
file.Read( ARRAYDATA(buff), (long)dwSize );
if ( dwSize == 0 )
return (DWORD)0;
#ifdef _DEBUG
// TRACE (_T("read") );
// TRACE ( _T("数目:%d"), (long)dwSize );
// for ( int k = 0; k < ARRAYSIZE(buff); k++ )
// {
// TRACE (_T("%d "), buff[k] );
// }
// TRACE (_T("\n") );
#endif//#ifdef _DEBUG
long lngPos = 0;
long lngOldPos = 0;
CString strFileName;
COleDateTime timeBegin, timeEnd;
while ( lngPos < ARRAYSIZE(buff) )
{
lngOldPos = lngPos;
long lngSize = 0;
memcpy ( &lngSize, ARRAYDATA(buff)+lngPos, sizeof(long) );
lngPos += sizeof(long);
BYTEARRAY buffRec;
ARRAYRESIZE( buffRec, lngSize );
memcpy ( ARRAYDATA(buffRec), ARRAYDATA(buff)+lngPos, lngSize );
lngPos += lngSize;
COwnerArchive ar( COwnerArchive::storing );
ar.SvrWrite( buffRec );
ar.SvrSeekToBegin();
ar.SvrChangeMode( COwnerArchive::load );
ar >> timeBegin;
ar >> timeEnd;
ar >> strFileName;
}
return lngOldPos;
}
/*
CString CVirtualInfoFile::mfGetDirectoryPath( CString strFileFullName )
{
int iPos = m_strFileName.ReverseFind(_T('.'));
CString strPath = m_strFileName.Left( iPos ) + CString(_T("\\"));
return strPath;
}
*/
CVirtualSaveStruct::CVirtualSaveStruct()
{
m_bValid = TRUE;
m_strGroupObjName = _T("");
m_strDataSavePath = _T("");
}
CVirtualSaveStruct::~CVirtualSaveStruct()
{
}
CVirtualSaveFile* CVirtualSaveStruct::SvrCreateSaveFile(CVirtualInfoFile* pInfoFile,BOOL bLoadFromExistFile)
{
//从本对象中生成一个存盘文件
CVirtualSaveFile* pFile = new CVirtualSaveFile(this->m_strFileName,this->m_timeStart ,this->m_timeEnd );
//lzlzlz
pFile->m_pInfoFile = pInfoFile;
if(S_FILE_BE_BAD == pFile ->SvrLoadSaveBlock(true,bLoadFromExistFile))
{
delete pFile;
pFile = NULL;
return NULL;
}
return pFile;
}
void CVirtualSaveStruct::Serialize(COwnerArchive& ar)
{
if (ar.IsStoring ())
{
//删除掉存盘路径再保存,否则太浪费空间了
CString strShortName ;
//CString strShortName = McgsGetFileNameEx(m_strFileName);
ar << strShortName;
ar << m_timeStart;
ar << m_timeEnd;
}
else
{
//如果读到的是短路径,补上存盘路径
CString strTmpName;
ar >> strTmpName;
if(strTmpName.Find(_T('\\')) == -1)
{
if(m_strGroupObjName.IsEmpty() || m_strDataSavePath.IsEmpty())
{
ASSERT(FALSE);
return;
}
//短名
m_strFileName.Format(_T("%s\\%s\\%s"), m_strDataSavePath,m_strGroupObjName,strTmpName) ;
}
else
{
m_strFileName = strTmpName;
}
// ::AfxMessageBox(m_strFileName);
ar >> m_timeStart;
ar >> m_timeEnd;
/*CTime t1(m_timeStart);
CTime t2(m_timeEnd);
CString str,str1;
str=t1.Format("%Y-%m-%d,%H:%M:%S");
str1=t2.Format("%Y-%m-%d,%H:%M:%S");
::AfxMessageBox(str);
::AfxMessageBox(str1); */
}
}
int CVirtualInfoFile::mfStoreCurSaveFileInfo()
{
if (m_pCurSaveFile != NULL)
{
//查找对应的东西并保存
for (int i = 0 ; i < m_arraySaveInfo.GetSize() ; i ++)
{
if (m_arraySaveInfo[i].m_strFileName.CompareNoCase(m_pCurSaveFile->m_strFileName ) == 0)
{
m_arraySaveInfo[i].m_timeEnd = m_pCurSaveFile->m_timeEnd;
m_arraySaveInfo[i].m_timeStart = m_pCurSaveFile->m_timeStart;
return i;
}
}
CVirtualSaveStruct c;
c.m_strFileName = m_pCurSaveFile->m_strFileName;
c.m_timeEnd = m_pCurSaveFile->m_timeEnd;
c.m_timeStart = m_pCurSaveFile->m_timeStart;
m_arraySaveInfo.Add(c);
return m_arraySaveInfo.GetSize () - 1;
}
return -1;
}
int CVirtualInfoFile::mfGetCurReadFileInfo()
{
if (m_pCurReadFile != NULL)
{
//查找对应的东西并保存
for (int i = 0 ; i < m_arraySaveInfo.GetSize() ; i ++)
{
if (m_arraySaveInfo[i].m_strFileName.CompareNoCase(
m_pCurReadFile->m_strFileName ) == 0)
{
return i;
}
}
return - 1;
}
return -1;
}
// 增加的函数
// add by dagger 2003.3.3
BOOL CVirtualInfoFile::SvrDeleteForSpace()
{
// 如果只有一个文件,可能性不大,要么就是硬盘空间太小
// 如果没有文件,还能进来,真是神了。
// 所以必须有两个文件以上才行
if( m_arraySaveInfo.GetSize() <= 1 )
return FALSE;
// 删掉第一个存盘文件,如果没删掉就返回出错
if( DeleteFile( m_arraySaveInfo[ 0 ].m_strFileName ) == FALSE )
return FALSE;
TRACE( _T( "文件%s被成功的删掉了!!\n" ), m_arraySaveInfo[ 0 ].m_strFileName );
//删掉第一个存盘文件数组
m_arraySaveInfo.RemoveAt( 0 );
// 现在第一个文件就是以前的第二个文件,
// 所以开始时间就变成了以前第二个文件的开始时间
m_timeStart = m_arraySaveInfo[ 0 ].m_timeStart;
// 从新写infofile;
//SvrFreshInfoToDisk();减少刷盘
return TRUE;
}
// end add;
//目前设计为不经常修改infofile
//lzlzlz 2003.6.24 {
/////////////
//CVirtualDBQuery
CVirtualDBQuery::CVirtualDBQuery(COleDateTime tBegin,
COleDateTime tEnd,
long tBeginMs,
long tEndMs,
DWORD dwStyle)
{
m_tBegin = tBegin;
m_tEnd = tEnd;
m_lBeginMs = tBeginMs;
m_lEndMs = tEndMs;
m_dwStyle = dwStyle;
m_tLast = m_tBegin;
m_dtBegin = 0.0;
m_dtEnd = 0.0;
}
bool CVirtualDBQuery::SvrPrepare(COleDateTime tCur, long lMSCur)
{
if(tCur < m_tBegin || tCur > m_tEnd)
{
return false;
}
/*if(CVirtualInfoFile::m_exStatus == CVirtualInfoFile::MCGS_FORHISPIC)
{
//获取用户设定时间间隔
COleDateTimeSpan tStep(CVirtualInfoFile::m_fStep / 24 / 3600);
if(tCur - m_tLast < tStep)
{
return false;
}
}*/ //zzm 2003-7-16 这段代码无用
if((m_dwStyle & MCGS_READDATA_MSECOND) == MCGS_READDATA_MSECOND)
{
double dtBegin = m_tBegin.m_dt + (double)m_lBeginMs / 24 / 3600 / 1000;
double dtEnd = m_tEnd.m_dt + (double)m_lEndMs / 24 / 3600 / 1000;
double dtCur = tCur.m_dt + (double)lMSCur / 24 / 3600 / 1000;
if(dtCur < dtBegin || dtCur > dtEnd)
{
return false;
}
}
m_tLast = tCur;
return true;
}
//lzlzlz 2003.6.24 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -