/* Delete() Elimina della lista il valore relativo alla coppia sezione/chiave. Non elimina fisicamente l'elemento ma si limita a marcarlo in modo tale che quando la lista viene salvata sul registro si possano individuare le chiavi da eliminare fisicamente. LPCSTR lpcszSectionName nome sezione LPCSTR lpcszKeyName nome chiave */ BOOL CConfig::Delete(LPCSTR lpcszSectionName,LPCSTR lpcszKeyName) { BOOL bDeleted = FALSE; CONFIG* c; ITERATOR iter; // scorre la lista cercando l'entrata relativa alla coppia sezione/chiave if((iter = m_plistConfig->First())!=(ITERATOR)NULL) { do { c = (CONFIG*)iter->data; if(c) if(strcmp(lpcszSectionName,c->GetSection())==0) { if(strcmp(lpcszKeyName,c->GetName())==0) { // marca l'elemento per l'eliminazione c->SetType(NULL_TYPE); SetModified(TRUE); bDeleted = TRUE; break; } } iter = m_plistConfig->Next(iter); } while(iter!=(ITERATOR)NULL); } return(bDeleted); }
/* DeleteSection() Elimina dal registro (e dalla lista) i valori presenti nella lista relativi alla sezione. LPCSTR lpcszRootKey nome della chiave base LPCSTR lpcszSectionKey nome della sezione BOOL bDeleteFromRegistry flag per eliminazione delle chiavi dal registro */ void CConfig::DeleteSection(LPCSTR lpcszRootKey,LPCSTR lpcszSectionKey,BOOL bDeleteFromRegistry/*=FALSE*/) { CONFIG* c; ITERATOR iter; char szKey[REGKEY_MAX_KEY_VALUE+1]; if(m_pRegistry) { m_pRegistry->Attach(HKEY_CURRENT_USER); // elimina (dalla lista e dal registro) le chiavi relative alla sezione if((iter = m_plistConfig->First())!=(ITERATOR)NULL) { do { c = (CONFIG*)iter->data; if(c) // chiave da eliminare if(c->GetType()!=NULL_TYPE && strcmp(c->GetSection(),lpcszSectionKey)==0) { // elimina la chiave dal registro if(bDeleteFromRegistry) { _snprintf(szKey,sizeof(szKey)-1,DEFAULT_REG_KEY"\\%s\\%s",lpcszRootKey,c->GetSection()); if(m_pRegistry->Open(HKEY_CURRENT_USER,szKey)==ERROR_SUCCESS) { m_pRegistry->DeleteValue(c->GetName()); m_pRegistry->Close(); } } // elimina la chiave dalla lista //m_plistConfig->Remove(iter); // eliminando l'elemento della lista (iter) e non la chiave (marcandola come cancellata) i salvataggi successivi // non possono eliminare dal registro le serie di chiavi come Key[0]...Key[n] //Delete(c->GetSection(),c->GetName()); c->SetType(NULL_TYPE); SetModified(TRUE); } iter = m_plistConfig->Next(iter); } while(iter!=(ITERATOR)NULL); } m_pRegistry->Detach(); SetModified(TRUE); } }