#include "StdAfx.h"
|
#include "akFileDB.h"
|
|
CakFileDB::CakFileDB(void)
|
{
|
//m_mapData["aa"] = "123";
|
//m_mapData["bb"] = "321";
|
|
InitializeCriticalSection(&m_csAkFileDB);
|
|
if(1)//test
|
{
|
EnterCriticalSection(&m_csAkFileDB);
|
savefile("aaa.txt");
|
|
clear();
|
|
openfile("aaa.txt");
|
|
LeaveCriticalSection(&m_csAkFileDB);
|
}
|
|
|
|
|
}
|
|
|
void CakFileDB::setWriteEnter()
|
{
|
EnterCriticalSection(&m_csAkFileDB);
|
}
|
|
void CakFileDB::setWriteRelease()
|
{
|
LeaveCriticalSection(&m_csAkFileDB);
|
}
|
|
|
CakFileDB::~CakFileDB(void)
|
{
|
DeleteCriticalSection(&m_csAkFileDB);
|
}
|
|
|
bool CakFileDB::openfile( char* filename )
|
{
|
m_bFileOpen = FALSE;
|
FILE* pf;
|
if(pf = fopen(filename, "r"))
|
{
|
clear();//ÇöÀç º¸°üµ¥ÀÌÅÍ »èÁ¦
|
|
m_bFileOpen = TRUE;
|
|
char buffer[1024];
|
char* pText;
|
char strKey[1024];
|
char strVal[1024];
|
int i,j,nLen;
|
while (1)
|
{
|
pText = fgets(buffer, 1024, pf);
|
if(strlen(buffer) == 0 || pText == NULL) break;
|
|
nLen = strlen(buffer);
|
for(i=1; i<nLen-1; i++)
|
{
|
if(buffer[i] == '=')
|
{
|
strncpy(strKey, &buffer[0], i);
|
strKey[i] = NULL;
|
for(j=nLen-1; j>i+1; j--)
|
{
|
if(buffer[j] == '`' || buffer[j] == '\'')
|
{
|
strncpy(strVal, &buffer[i+2], (j-i-2));
|
strVal[(j-i-2)] = NULL;
|
break;
|
}
|
}
|
break;
|
}
|
}
|
//sscanf(buffer, "%s=%s", strKey, strVal);
|
//strKey[strlen(strKey)-1] = NULL;
|
//strVal[strlen(strVal)-1] = NULL;
|
setItem(strKey, strVal);
|
|
}
|
|
|
fclose(pf);
|
}
|
else
|
{
|
return false;
|
}
|
|
return true;
|
}
|
|
|
bool CakFileDB::savefile( char* filename )
|
{
|
FILE* pf;
|
if(pf = fopen(filename, "w"))
|
{
|
|
|
|
mapIDVal::iterator IterPos;
|
/*for(IterPos = m_mapData.begin(); IterPos != m_mapData.end(); ++IterPos)
|
{
|
if(((CString)IterPos->second).GetLength() == 0) continue;
|
fprintf(pf, "%s=`%s`\n", ((CString)IterPos->first).GetBuffer(), ((CString)IterPos->second).GetBuffer());
|
}*/
|
|
for(int i=0; i<m_vecOrder.size(); i++)
|
{
|
IterPos = m_vecOrder[i];
|
if(((CString)IterPos->second).GetLength() == 0) continue;
|
fprintf(pf, "%s=`%s`\n", ((CString)IterPos->first).GetBuffer(), ((CString)IterPos->second).GetBuffer());
|
}
|
|
|
|
fclose(pf);
|
}
|
else
|
{
|
return false;
|
}
|
return true;
|
}
|
|
|
|
|
void CakFileDB::clear()
|
{
|
m_mapData.clear();
|
m_vecOrder.clear();
|
m_bFileOpen = FALSE;
|
}
|
|
|
|
int CakFileDB::deleteItem( char* strKey )
|
{
|
if(strKey == NULL) return -1;
|
|
mapIDVal::iterator finder;
|
if ((finder = m_mapData.find(strKey)) != m_mapData.end())
|
{
|
for(int i=0; i<m_vecOrder.size(); i++)
|
{
|
if(m_vecOrder[i] == finder)
|
{
|
m_vecOrder.erase(m_vecOrder.begin()+i);
|
break;
|
}
|
}
|
|
m_mapData.erase( strKey );
|
|
}
|
return 0;
|
}
|
|
|
int CakFileDB::deleteItem( int nIndex )
|
{
|
if(nIndex<0 && m_vecOrder.size() >= nIndex) return -1;
|
|
CString strKey = (CString)(m_vecOrder[nIndex])->first;
|
|
m_mapData.erase( strKey );
|
m_vecOrder.erase(m_vecOrder.begin()+nIndex);
|
}
|
|
|
|
|
void CakFileDB::setItem( char* strKey, char* strVal )
|
{
|
mapIDVal::_Pairib pib = m_mapData.insert(mapIDVal::value_type(strKey, strVal));
|
|
if (!pib.second) // ۰¡ Áߺ¹ÀÌ´Ù.
|
{
|
|
}
|
else
|
{
|
m_vecOrder.push_back((mapIDValIt)pib.first);
|
}
|
|
}
|
|
void CakFileDB::setItem( char* strKey, int nVal )
|
{
|
CString strVal;
|
strVal.Format("%d", nVal);
|
|
setItem(strKey, strVal.GetBuffer());
|
|
}
|
|
void CakFileDB::setItem( char* strKey, float fVal )
|
{
|
CString strVal;
|
strVal.Format("%d", fVal);
|
|
setItem(strKey, strVal.GetBuffer());
|
}
|
|
void CakFileDB::setItem( char* strKey, double dVal )
|
{
|
CString strVal;
|
strVal.Format("%d", dVal);
|
|
setItem(strKey, strVal.GetBuffer());
|
}
|
|
void CakFileDB::setItem( char* strKey, long nVal )
|
{
|
CString strVal;
|
strVal.Format("%d", nVal);
|
|
setItem(strKey, strVal.GetBuffer());
|
}
|
|
void CakFileDB::setItem( int nIndex, char* strKey, char* strVal )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
setItem(key.GetBuffer(0), strVal);
|
}
|
|
void CakFileDB::setItem( int nIndex, char* strKey, int nVal )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
setItem(key.GetBuffer(0), nVal);
|
}
|
|
void CakFileDB::setItem( int nIndex, char* strKey, float fVal )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
setItem(key.GetBuffer(0), fVal);
|
}
|
|
void CakFileDB::setItem( int nIndex, char* strKey, double dVal )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
setItem(key.GetBuffer(0), dVal);
|
}
|
|
|
char* CakFileDB::getItemPoint( char* strKey )
|
{
|
mapIDVal::iterator itor = m_mapData.find(strKey);
|
if(itor != m_mapData.end())
|
{
|
return itor->second.GetBuffer();
|
}
|
return NULL;
|
}
|
|
|
|
void CakFileDB::getItem( char* strKey, char* strVal, char* strDefaultVal /*= ""*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
strcpy(strVal, pStr);
|
return;
|
}
|
|
strcpy(strVal, strDefaultVal);
|
}
|
|
void CakFileDB::getItem( char* strKey, CString* strVal, char* strDefaultVal /*= ""*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
*strVal = pStr;
|
return;
|
}
|
*strVal = strDefaultVal;
|
}
|
|
|
void CakFileDB::getItem( char* strKey, int* nVal, int nDefaultVal /*= 0*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
*nVal = atoi(pStr);
|
return;
|
}
|
*nVal = nDefaultVal;
|
}
|
|
|
void CakFileDB::getItem( char* strKey, float* fVal, float fDefaultVal /*= 0*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
*fVal = atof(pStr);
|
return;
|
}
|
*fVal = fDefaultVal;
|
}
|
|
void CakFileDB::getItem( char* strKey, double* dVal, double dDefaultVal /*= 0*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
*dVal = atoi(pStr);
|
return;
|
}
|
*dVal = dDefaultVal;
|
}
|
|
void CakFileDB::getItem( char* strKey, long* nVal, long nDefaultVal /*= 0*/ )
|
{
|
char* pStr = NULL;
|
if(pStr = getItemPoint(strKey))
|
{
|
*nVal = atol(pStr);
|
return;
|
}
|
*nVal = nDefaultVal;
|
}
|
|
void CakFileDB::getItem( int nIndex, char* strKey, CString* strVal, char* strDefaultVal /*= ""*/ )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
getItem(key.GetBuffer(0), strVal, strDefaultVal);
|
}
|
|
void CakFileDB::getItem( int nIndex, char* strKey, char* strVal, char* strDefaultVal /*= ""*/ )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
getItem(key.GetBuffer(0), strVal, strDefaultVal);
|
}
|
|
void CakFileDB::getItem( int nIndex, char* strKey, int* nVal, int nDefaultVal /*= 0*/ )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
getItem(key.GetBuffer(0), nVal, nDefaultVal);
|
}
|
|
void CakFileDB::getItem( int nIndex, char* strKey, float* fVal, float fDefaultVal /*= 0*/ )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
getItem(key.GetBuffer(0), fVal, fDefaultVal);
|
}
|
|
void CakFileDB::getItem( int nIndex, char* strKey, double* dVal, double dDefaultVal /*= 0*/ )
|
{
|
CString key;
|
key.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
getItem(key.GetBuffer(0), dVal, dDefaultVal);
|
}
|
|
|
void CakFileDB::setItemClear( char* strKey )
|
{
|
mapIDValIt pos;
|
|
CString findkey;
|
findkey.Format("%s%s", strKey, ITEMSEP);
|
|
for(pos = m_mapData.begin(); pos != m_mapData.end();)
|
{
|
if(!strncmp(findkey.GetBuffer(), ((CString)pos->first).GetBuffer(), findkey.GetLength()))
|
{
|
m_mapData.erase(pos++);
|
}
|
else
|
{
|
++pos;
|
}
|
}
|
}
|
|
int CakFileDB::getItemNum( char* strKey )
|
{
|
mapIDValIt pos;
|
CString findkey;
|
findkey.Format("%s%s", strKey, ITEMSEP);
|
|
int nCount=0;
|
for(pos = m_mapData.begin(); pos != m_mapData.end(); pos++)
|
{
|
if(!strncmp(findkey.GetBuffer(), ((CString)pos->first).GetBuffer(), findkey.GetLength()))
|
{
|
nCount++;
|
}
|
}
|
|
return nCount;
|
}
|
|
char* CakFileDB::getItemPoint( int nIndex, char* strKey )
|
{
|
CString findkey;
|
findkey.Format("%s%s%d", strKey, ITEMSEP, nIndex);
|
|
return getItemPoint(findkey.GetBuffer(0));
|
}
|