📄 bag.cpp
字号:
// Bag.cpp: implementation of the CBag class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Bag.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBag::CBag()
{
m_pBagTagList=NULL;
m_OpenFlag =FALSE;
}
CBag::~CBag()
{
if (m_pBagTagList!=NULL) delete m_pBagTagList;
}
int CBag::OpenMem(char *buf,int len,int mode)
{
if (IsOpen()) Close();
int ret= m_DbFile.OpenMem(buf,len,mode);
if (ret<0) return ret;
if (mode==BAG_MODE_READ){
/// m_DbFile.SetFieldMask(2,1);
CreateID();
}
if (mode==BAG_MODE_CREATE){
m_DbFile.AddInfo("Test",4);
m_DbFile.SetTableSize(3);
m_DbFile.SetTableName(0,"ID",0);
m_DbFile.SetTableName(1,"文件名",0);
m_DbFile.SetTableName(2,"数据区",0);
m_DbFile.AddTable();
}
m_OpenFlag= TRUE;
return ret;
}
int CBag::Open(char *bagfn,int mode)
{
if (IsOpen()) Close();
int ret= m_DbFile.Open(mode,bagfn);
if (ret<0) return ret;
if (mode==BAG_MODE_READ){
CreateID();
}
if (mode==BAG_MODE_CREATE){
m_DbFile.AddInfo("Test",4);
m_DbFile.SetTableSize(3);
m_DbFile.SetTableName(0,"ID",0);
m_DbFile.SetTableName(1,"文件名",0);
m_DbFile.SetTableName(2,"数据区",0);
m_DbFile.AddTable();
}
/// m_DbFile.SetFieldMask(2,1);
m_OpenFlag= TRUE;
return ret;
}
void CBag::Close()
{
if (IsOpen()) m_DbFile.Close();
m_OpenFlag=FALSE;
}
int CBag::Add(CBagTag *ptag)
{
ChangePkgFmt(ptag,TRUE);
m_DbFile.SetTableSize(BAG_TABLE_SIZE);
//id
m_DbFile.SetFieldData(BAG_ID_POS,ptag->strID.GetBuffer(0),ptag->strID.GetLength());
//filename
m_DbFile.SetFieldData(BAG_FILENAME_POS,ptag->strFileName.GetBuffer(0),ptag->strFileName.GetLength());
//buffer
m_DbFile.SetFieldData(BAG_BUFFER_POS,(char *)ptag->buffer,ptag->nBufferSize);
int ret = m_DbFile.AddRecord();
if(ret<0){ return -1; }
return 0;
}
int CBag::Add(CBag *pBag)
{
return 0;
}
int CBag::SeekID(CString idstr)
{
if( m_pBagTagList==NULL) return -1;
int count = GetBagCount();
for(int i=0;i<count;i++){
if (!idstr.Compare(m_pBagTagList[i].ID)) return i;
}
return -1;
}
int CBag::GetData(int pos, CBagTag *pdata,int *flag)
{
if (pos<0) return -1;
m_DbFile.GetRecord(pos);
pdata->strID.Format("%s",m_DbFile.GetFieldData(BAG_ID_POS));
pdata->strFileName.Format("%s",m_DbFile.GetFieldData(BAG_FILENAME_POS));
pdata->buffer =(BYTE *) m_DbFile.GetFieldDataBin(BAG_BUFFER_POS,(int *)&pdata->nBufferSize);
if (flag){ *flag = m_DbFile.IsDBFormat((char *)pdata->buffer); }
return 0;
}
int CBag::ChangePkgFmt(CBagTag *pData, BOOL bSave)
{
CString str;
int iType;
if(!bSave)
{
iType=pData->strFileName[0]-'A';
if(iType>=0 && iType<=20)
{
pData->nType=iType;
str=pData->strFileName.Mid(1);
pData->strFileName=str;
}
else
pData->nType=-1;
}
else
{
if(pData->nType>=0)
{
str.Format("%c",pData->nType+'A');
str+=pData->strFileName;
pData->strFileName=str;
}
}
return 0;
}
int CBag::GetBagCount()
{
return m_DbFile.GetCount();
}
int CBag::CreateID()
{
int count;
count = GetBagCount();
if (m_pBagTagList!=NULL) delete m_pBagTagList;
m_pBagTagList = new BagTagList[count];
CBagTag bagtag;
for(int i=0;i<count;i++){
GetData(i,&bagtag);
sprintf(m_pBagTagList[i].ID,bagtag.strID.GetBuffer(0));
m_pBagTagList[i].pos = i;
}
return 0;
}
BOOL CBag::IsOpen()
{
return m_OpenFlag;
}
char * CBag::GetBagMem(int *len)
{
return m_DbFile.GetMem(len);
}
void CBag::SetGetMode(BOOL flag)
{
m_DbFile.SetFieldMask(2,(flag)?0:1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -