📄 ceuidldb.cpp
字号:
// CeUidlDB.cpp: implementation of the CeUidlDB class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CeUidlDB.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CeUidlDB::CeUidlDB()
{
}
CeUidlDB::~CeUidlDB()
{
}
BOOL CeUidlDB::MountVolume(LPWSTR lpszVol)
{
if(lpszVol == NULL)
{
CREATE_SYSTEMGUID(&m_ceguid);
}
else
{
if(CeMountDBVol(&m_ceguid,lpszVol,OPEN_ALWAYS) == FALSE)
return FALSE;
}
return TRUE;
}
BOOL CeUidlDB::UnmountVolume()
{
CloseHandle (m_hdb);
BOOL res = CeUnmountDBVol(&m_ceguid);
int id = GetLastError();
return res;
}
BOOL CeUidlDB::CreateUidlDB(TCHAR* lpszName)
{
CEOID g_oidDB = 0;
CEDBASEINFO dbm;
dbm.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
dbm.dwDbaseType = UIDL_DATABASE_TYPE;
dbm.wNumSortOrder = 1;
dbm.rgSortSpecs[0].propid = UID_UIDL;
dbm.rgSortSpecs[0].dwFlags = 0;
lstrcpy(dbm.szDbaseName,lpszName);
g_oidDB = CeCreateDatabaseEx(&m_ceguid,&dbm);
if (g_oidDB == 0) {
TCHAR szErr[128];
wsprintf (szErr, TEXT ("Database create failed. \
rc %d"), GetLastError());
MessageBox (NULL, szErr, L"Error", MB_OK|MB_ICONERROR);
return FALSE;
}
return TRUE;
}
BOOL CeUidlDB::OpenUidlDB(TCHAR *lpszName, CEPROPID proid)
{
CEOID g_oidDB = 0;
CloseHandle(m_hdb);
m_hdb = CeOpenDatabaseEx(&m_ceguid,&g_oidDB,lpszName, UID_UIDL, 0, NULL);
if (m_hdb == INVALID_HANDLE_VALUE)
{
DWORD Error = GetLastError();
return FALSE;
}
return TRUE;
}
BOOL CeUidlDB::ReadDBRecord(TCHAR *uidl)
{
WORD wProps;
CEOID oid;
PCEPROPVAL pRecord;
PBYTE pBuff;
DWORD dwRecSize;
int i;
pBuff = 0;
oid = CeReadRecordProps (m_hdb, CEDB_ALLOWREALLOC, &wProps, NULL,
&(LPBYTE)pBuff, &dwRecSize);
if (oid == 0)
return 0;
pRecord = (PCEPROPVAL)pBuff;
//memset(&pData, 0 , sizeof(MailInfoDB));
for (i = 0; i < wProps; i++)
{
switch (pRecord->propid) {
case UID_UIDL:
lstrcpy(uidl, pRecord->val.lpwstr);
break;
default:
break;
}
pRecord++;
}
LocalFree (pBuff);
return TRUE;
}
BOOL CeUidlDB::WriteDBRecord(TCHAR *uidl)
{
CEPROPVAL pRecPtr[1];
pRecPtr[0].propid = UID_UIDL;
pRecPtr[0].wFlags = 0;
pRecPtr[0].val.lpwstr = uidl;
CEOID oid= CeWriteRecordProps(m_hdb,0,1,pRecPtr);
if(oid == 0)
{
int error = GetLastError();
return FALSE;
}
return TRUE;
}
BOOL CeUidlDB::UidlExist(TCHAR *uidl)
{
CEOID oid;
DWORD dwIndex;
CEPROPVAL property;
// First seek to the start of the database.
oid = CeSeekDatabase (m_hdb, CEDB_SEEK_BEGINNING, 0, &dwIndex);
property.propid = UID_UIDL; // Set property to search.
property.wLenData = 0; // Not used but clear anyway.
property.wFlags = 0; // No flags to set
property.val.lpwstr = uidl; // Data for property
oid = CeSeekDatabase (m_hdb, CEDB_SEEK_VALUEFIRSTEQUAL , (DWORD)(&property),&dwIndex);
if (oid == 0) {
return FALSE;
}else
return TRUE;
}
CEOID CeUidlDB::FindDatabase(TCHAR name[], DWORD kind)
{
HANDLE hdb;
CEOID id;
CEOIDINFO imf;
hdb = ::CeFindFirstDatabaseEx(&m_ceguid,kind);
if(hdb != INVALID_HANDLE_VALUE)
{
id = ::CeFindNextDatabaseEx(hdb,&m_ceguid);
while(id)
{
CeOidGetInfoEx(&m_ceguid,id,&imf);
if(wcscmp(imf.infDatabase.szDbaseName,name)==0)
return id;
id = ::CeFindNextDatabaseEx(hdb,&m_ceguid);
}
}
return NULL;
}
BOOL CeUidlDB::CloseDBHandle()
{
return CloseHandle(m_hdb);
}
BOOL CeUidlDB::DeleteDBRecord(TCHAR *uidl)
{
CEOID oid;
DWORD dwIndex;
CEPROPVAL property;
// First seek to the start of the database.
oid = CeSeekDatabase (m_hdb, CEDB_SEEK_BEGINNING, 0, &dwIndex);
property.propid = UID_UIDL; // Set property to search.
property.wLenData = 0; // Not used but clear anyway.
property.wFlags = 0; // No flags to set
property.val.lpwstr = uidl; // Data for property
oid = CeSeekDatabase (m_hdb, CEDB_SEEK_VALUEFIRSTEQUAL , (DWORD)(&property),&dwIndex);
if (oid == 0) {
return FALSE;
}else
return CeDeleteRecord(m_hdb,oid);
return TRUE;
}
int CeUidlDB::GetDBRecordsNum(TCHAR *DBName)
{
HANDLE hDBList;
CEOID oidDB;
CEOIDINFO dbinfo;
hDBList = CeFindFirstDatabaseEx (&m_ceguid,UIDL_DATABASE_TYPE);
if (hDBList != INVALID_HANDLE_VALUE)
{
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
while (oidDB)
{
CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
if(dbinfo.wObjType == OBJTYPE_DATABASE)
{
if(lstrcmp(dbinfo.infDatabase.szDbaseName,DBName) == 0)
return dbinfo.infDatabase.wNumRecords;
}
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
}
CloseHandle (hDBList);
}
return -1;
}
BOOL CeUidlDB::DeleteDB(TCHAR *DBName)
{
CEOID id = NULL;
id = this->FindDatabase(DBName,UIDL_DATABASE_TYPE);
if(id == NULL)
return FALSE;
else
return CeDeleteDatabaseEx(&m_ceguid,id);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -