BOOL vmsDownloadsGroupsMgr::SaveGroupsTreeToFile(HANDLE hFile, PDLDS_GROUPS_TREE pRoot) { int cGroups = pRoot->GetLeafCount (); DWORD dw; if (FALSE == WriteFile (hFile, &cGroups, sizeof (int), &dw, NULL)) return FALSE; for (int i = 0; i < cGroups; i++) { PDLDS_GROUPS_TREE pGroupTree = pRoot->GetLeaf (i); if (FALSE == SaveGroupToFile (hFile, pGroupTree->GetData ())) return FALSE; if (FALSE == SaveGroupsTreeToFile (hFile, pGroupTree)) return FALSE; } return TRUE; }
BOOL vmsDownloadsGroupsMgr::SaveToDisk() { fsString strFile = fsGetDataFilePath ("groups.sav"); bool bSaveGroupsInformation = false; { vmsCriticalSectionAutoLock csalGroupsInformationChangeGuardAutoLock(&m_csGroupsInformationChangeGuard); bSaveGroupsInformation = m_bIsGroupsInformationChanged; m_bIsGroupsInformationChanged = false; } if (!bSaveGroupsInformation) { return TRUE; } HANDLE hFile = CreateFile (strFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL); if (hFile == INVALID_HANDLE_VALUE) return FALSE; vmsDownloadsGroupsFileHdr hdr; DWORD dw; if (FALSE == WriteFile (hFile, &hdr, sizeof (hdr), &dw, NULL)) { CloseHandle (hFile); return FALSE; } if (FALSE == WriteFile (hFile, &m_nGrpNextId, sizeof (UINT), &dw, NULL)) { CloseHandle (hFile); return FALSE; } BOOL bOk = SaveGroupsTreeToFile (hFile, m_tGroups); CloseHandle (hFile); return bOk; }