bool CTaskList::LoadTasks() { CINIFile* pTasksIni = new CINIFile(cTasksFile); CTask* pTask = NULL; CDateTime dtNow = DTNow(); int iSections = pTasksIni->GetSectionsCount(); for (int t = 0; t < iSections; t++) { CString sSect = pTasksIni->GetNextSection(); if (sSect.Empty()) continue; pTask = new CTask(); m_aTasks.Add(pTask); // Получим указатель на структуру, содержащую данные задачи PTaskInfo pTaskInfo = pTask->GetPTaskInfo(); // Заполним данные задачи из INI файла pTaskInfo->sName = sSect; pTaskInfo->sSrcFolder = pTasksIni->GetString(sSect.C(), TEXT("Source folder")); pTaskInfo->sDestFolder = pTasksIni->GetString(sSect.C(), TEXT("Dest folder")); pTaskInfo->sDestGenName = pTasksIni->GetString(sSect.C(), TEXT("Generate name")); pTaskInfo->sIncludeMask = pTasksIni->GetString(sSect.C(), TEXT("Incl mask")); pTaskInfo->sExcludeMask = pTasksIni->GetString(sSect.C(), TEXT("Excl mask")); pTaskInfo->bSubFolders = pTasksIni->GetBool(sSect.C(), TEXT("Subfolders")); pTaskInfo->bScheduled = pTasksIni->GetBool(sSect.C(), TEXT("Scheduled")); pTaskInfo->sSchedule = pTasksIni->GetString(sSect.C(), TEXT("Schedule")); pTaskInfo->bDoArchive = pTasksIni->GetBool(sSect.C(), TEXT("Do archive")); pTaskInfo->bArchCompress = pTasksIni->GetNumeric<BYTE>(sSect.C(), TEXT("Compress level")); pTaskInfo->bArchSFX = pTasksIni->GetBool(sSect.C(), TEXT("SFX")); pTaskInfo->bArchDelFiles = pTasksIni->GetBool(sSect.C(), TEXT("Del files")); pTaskInfo->bArchLock = pTasksIni->GetBool(sSect.C(), TEXT("Lock")); pTaskInfo->sArchTaskCmd = pTasksIni->GetString(sSect.C(), TEXT("Archiver cmd")); pTaskInfo->i64FinishedBytes = pTasksIni->GetNumeric<__int64>(sSect.C(), TEXT("Finished bytes")); // "Распакуем" строку последнего запуска в CDateTime CDateTime dtLastRun; dtLastRun.UnpackFromString(pTasksIni->GetString(sSect.C(), TEXT("Last run"), TEXT("00000000000000"))); pTask->SetLastRun(dtLastRun); // построим дерево расписания для задачи pTask->BuildScheduleTree(); // и подсчитаем время след. запуска pTask->CalcNextRun(dtNow); } delete pTasksIni; return true; }