www.pudn.com > isync2[1].0.rar > CTransferCard.cpp
/*************************************************************************************************\ * 文件名称 :CTransferCard.cpp * CopyRight (c) 2004 汉王科技公司 * * 作者 : 王欣 * 创建时间: 2004年09月06日 * 当前版本: 0.1 * * 说明 :见类头文件说明 * \**************************************************************************************************/ #include#include #include "CTransferCard.h" #include #include const char *CardDataFile = "../Data/card.dat"; const char *CardGroupsFile = "../Data/Groups.dat"; const int CTransferCard::len; char CTransferCard::errString[len]; const char *CTransferCard::errInfo[RET_OK + 1] = { "error open database", "error read database", "error write database", "database full" "read database over" "program return normally" }; CTransferCard::CTransferCard () : cardDb(CardDataFile) { transfered = 0; stat = UN_INITIAL; } CTransferCard::~CTransferCard () { TransferComplete(); readId = 0; transfered = 0; } void CTransferCard::AddType (const char *typeName) { typeVct.push_back(typeName); } CTransferCard::RetValue_T CTransferCard::InitRead (void) { assert(UN_INITIAL == stat); if (cardDb.Open(CDatabase::R) == false) { return ERR_OPENDB; } stat = IPHONE_TO_PC; readId = cardDb.FindFirst(); return (0 == readId) ? RET_READ_OVER : RET_OK; } CTransferCard::RetValue_T CTransferCard::InitWrite (void) { assert(UN_INITIAL == stat); if (cardDb.Open(CDatabase::RW) == false) { return ERR_OPENDB; } stat = PC_TO_IPHONE; return AddGroupsFromFile(this) ? ERR_READDB : RET_OK; } CTransferCard::RetValue_T CTransferCard::ReadCard (CardStruct_T *pcard) { assert(IPHONE_TO_PC == stat); if (0 == readId) { return RET_READ_OVER; } if (cardDb.Fetch(pcard, readId) == false) { return ERR_READDB; } ++transfered; readId = cardDb.FindNext(readId); return RET_OK; } bool CTransferCard::SaveTypeInfo (void) { std::string types; for (size_t i = 0; i < typeVct.size(); ++i) { types += typeVct[i] + ";"; } FILE *pf = fopen(CardGroupsFile, "w"); if (pf != NULL) { if (fwrite(types.c_str(), types.size(), 1, pf) < 0) { perror("In CSettingWnd::WndCallback, fwrite "); return false; } fclose(pf); } else { perror("In CSettingWnd::WndCallback, fopen "); return false; } return true; } void CTransferCard::TransferComplete (void) { if (stat != UN_INITIAL) { if (PC_TO_IPHONE == stat) { #ifdef NDEBUG SaveTypeInfo(); #else bool ret = SaveTypeInfo(); #endif assert(true == ret); } cardDb.Close(); stat = UN_INITIAL; } } CTransferCard::RetValue_T CTransferCard::WriteCard (CardStruct_T *pcard) { assert(PC_TO_IPHONE == stat); size_t ret = cardDb.Insert(pcard); switch (ret) { case CDatabase::DBERR_DATABASE_FULL: return RET_DBFULL; break; case CDatabase::DBERR_READDATA: case CDatabase::DBERR_WRITEHEADITEM: case CDatabase::DBERR_WRITEDATA: return ERR_WRITEDB; break; default: break; } ++transfered; // SVIter_T pos_begin = typeVct.begin(), pos_end = typeVct.end(); if (strcmp(pcard->szType, NoTypeName) != 0 && find(pos_begin, pos_end, pcard->szType) == pos_end) // it it a new type { typeVct.push_back(pcard->szType); } return RET_OK; }