// 读方案 void ReadOptions(LPCTSTR path) { CString strBuf; gzFile f = gzopen_w(path, "rb"); if (f == NULL) goto UseDefaultOptions; // 头部 char header[2]; gzread(f, header, sizeof(header)); if (header[0] != 'T' || header[1] != 'B') { gzclose(f); goto UseDefaultOptions; } g_optionsLock.Lock(); // 违规内容 ReadRegexTexts(f, g_keywords); // 屏蔽用户 ReadRegexTexts(f, g_blackList); // 信任用户 int intBuf; gzread(f, &intBuf, sizeof(int)); // 长度 for (int i = 0; i < intBuf; i++) { ReadText(f, strBuf); g_whiteList.insert(strBuf); } // 信任内容 ReadRegexTexts(f, g_whiteContent); gzread(f, &g_scanInterval, sizeof(int)); // 扫描间隔 gzread(f, &g_banID, sizeof(BOOL)); // 封ID gzread(f, &g_banDuration, sizeof(int)); // 封禁时长 BOOL banIP; gzread(f, &banIP, sizeof(BOOL)); // 封IP gzread(f, &g_banTrigCount, sizeof(int)); // 封禁违规次数 gzread(f, &g_onlyScanTitle, sizeof(BOOL)); // 只扫描标题 gzread(f, &g_deleteInterval, sizeof(float));// 删帖间隔 gzread(f, &g_confirm, sizeof(BOOL)); // 操作前提示 gzread(f, &g_scanPageCount, sizeof(int)); // 扫描最后页数 gzread(f, &g_briefLog, sizeof(BOOL)); // 只输出删帖封号 if (gzread(f, &g_delete, sizeof(BOOL)) != sizeof(BOOL)) // 删帖 g_delete = TRUE; if (gzread(f, &g_threadCount, sizeof(int)) != sizeof(int)) // 线程数 g_threadCount = 2; ReadText(f, g_banReason); // 封禁原因 if (!ReadText(f, g_imageDir)) // 违规图片目录 g_images.clear(); else ReadImages(g_imageDir); // 违规图片 if (gzread(f, &g_SSIMThreshold, sizeof(double)) != sizeof(double)) // 阈值 g_SSIMThreshold = 2.43; // 信任主题 g_trustedThread.clear(); if (gzread(f, &intBuf, sizeof(int)) == sizeof(int)) // 长度 for (int i = 0; i < intBuf; i++) { ReadText(f, strBuf); g_trustedThread.insert(strBuf); } if (gzread(f, &g_defriend, sizeof(BOOL)) != sizeof(BOOL)) // 拉黑 g_defriend = FALSE; if (gzread(f, &g_defriendTrigCount, sizeof(int)) != sizeof(int)) // 拉黑违规次数 g_defriendTrigCount = 5; if (gzread(f, &g_autoSaveLog, sizeof(BOOL)) != sizeof(BOOL)) // 自动保存日志 g_autoSaveLog = FALSE; g_optionsLock.Unlock(); gzclose(f); return; UseDefaultOptions: g_optionsLock.Lock(); g_keywords.clear(); // 违规内容 g_blackList.clear(); // 屏蔽用户 g_whiteList.clear(); // 信任用户 g_whiteContent.clear(); // 信任内容 g_scanInterval = 5; // 扫描间隔 g_banID = FALSE; // 封ID g_banDuration = 1; // 封禁时长 g_banTrigCount = 1; // 封禁违规次数 g_onlyScanTitle = FALSE; // 只扫描标题 g_deleteInterval = 2.0f; // 删帖间隔 g_confirm = TRUE; // 操作前提示 g_scanPageCount = 1; // 扫描最后页数 g_briefLog = FALSE; // 只输出删帖封号 g_delete = TRUE; // 删帖 g_threadCount = 2; // 线程数 g_banReason = _T(""); // 封禁原因 g_imageDir = _T(""); // 违规图片目录 g_images.clear(); // 违规图片 g_SSIMThreshold = 2.43; // 阈值 g_trustedThread.clear(); // 信任主题 g_defriend = FALSE; // 拉黑 g_defriendTrigCount = 5; // 拉黑违规次数 g_autoSaveLog = FALSE; // 自动保存日志 g_optionsLock.Unlock(); }
// 显示文件中的设置 void CSettingDlg::ShowOptionsInFile(LPCTSTR path) { CString strBuf; gzFile f = gzopen_w(path, "rb"); if (f == NULL) goto UseDefaultOptions; // 头部 char header[2]; gzread(f, header, sizeof(header)); if (header[0] != 'T' || header[1] != 'B') { gzclose(f); goto UseDefaultOptions; } // 违规内容 ReadRegexTexts(f, m_keywordsPage.m_list); // 屏蔽用户 ReadRegexTexts(f, m_blackListPage.m_list); // 信任用户 int size; gzread(f, &size, sizeof(int)); // 长度 m_whiteListPage.m_list.ResetContent(); int intBuf; for (int i = 0; i < size; i++) { ReadText(f, strBuf); m_whiteListPage.m_list.AddString(strBuf); } // 信任内容 ReadRegexTexts(f, m_whiteContentPage.m_list); // 违规图片 m_imagePage.m_updateImage = TRUE; BOOL boolBuf; float floatBuf; double doubleBuf; gzread(f, &intBuf, sizeof(int)); // 扫描间隔 strBuf.Format(_T("%d"), intBuf); m_prefPage.m_scanIntervalEdit.SetWindowText(strBuf); gzread(f, &boolBuf, sizeof(BOOL)); // 封ID m_prefPage.m_banIDCheck.SetCheck(boolBuf); gzread(f, &intBuf, sizeof(int)); // 封禁时长 m_prefPage.m_banDurationCombo.SetCurSel(intBuf == 1 ? 0 : (intBuf == 3 ? 1 : 2)); gzread(f, &boolBuf, sizeof(BOOL)); // 封IP gzread(f, &intBuf, sizeof(int)); // 封禁违规次数 strBuf.Format(_T("%d"), intBuf); m_prefPage.m_trigCountEdit.SetWindowText(strBuf); gzread(f, &boolBuf, sizeof(BOOL)); // 只扫描标题 m_prefPage.m_onlyScanTitleCheck.SetCheck(boolBuf); gzread(f, &floatBuf, sizeof(float)); // 删帖间隔 strBuf.Format(_T("%g"), floatBuf); m_prefPage.m_deleteIntervalEdit.SetWindowText(strBuf); gzread(f, &boolBuf, sizeof(BOOL)); // 操作前提示 m_prefPage.m_confirmCheck.SetCheck(boolBuf); gzread(f, &intBuf, sizeof(int)); // 扫描最后页数 strBuf.Format(_T("%d"), intBuf); m_prefPage.m_scanPageCountEdit.SetWindowText(strBuf); gzread(f, &boolBuf, sizeof(BOOL)); // 只输出删帖封号 m_prefPage.m_briefLogCheck.SetCheck(boolBuf); if (gzread(f, &boolBuf, sizeof(BOOL)) == sizeof(BOOL)) // 删帖 m_prefPage.m_deleteCheck.SetCheck(boolBuf); else m_prefPage.m_deleteCheck.SetCheck(TRUE); if (gzread(f, &intBuf, sizeof(int)) == sizeof(int)) // 线程数 { strBuf.Format(_T("%d"), intBuf); m_prefPage.m_threadCountEdit.SetWindowText(strBuf); } else m_prefPage.m_threadCountEdit.SetWindowText(_T("2")); ReadText(f, strBuf); // 封禁原因 m_prefPage.m_banReasonEdit.SetWindowText(strBuf); ReadText(f, strBuf); // 违规图片目录 m_imagePage.m_dirEdit.SetWindowText(strBuf); if (gzread(f, &doubleBuf, sizeof(double)) == sizeof(double)) // 阈值 { strBuf.Format(_T("%lf"), doubleBuf); m_imagePage.m_thresholdEdit.SetWindowText(strBuf); } else m_imagePage.m_thresholdEdit.SetWindowText(_T("2.43")); gzclose(f); return; UseDefaultOptions: m_keywordsPage.m_list.ResetContent(); // 违规内容 m_blackListPage.m_list.ResetContent(); // 屏蔽用户 m_whiteListPage.m_list.ResetContent(); // 信任用户 m_whiteContentPage.m_list.ResetContent(); // 信任内容 m_imagePage.m_updateImage = TRUE; // 违规图片 m_prefPage.m_scanIntervalEdit.SetWindowText(_T("5")); // 扫描间隔 m_prefPage.m_banIDCheck.SetCheck(FALSE); // 封ID m_prefPage.m_banDurationCombo.SetCurSel(0); // 封禁时长 m_prefPage.m_trigCountEdit.SetWindowText(_T("1")); // 封禁违规次数 m_prefPage.m_onlyScanTitleCheck.SetCheck(FALSE); // 只扫描标题 m_prefPage.m_deleteIntervalEdit.SetWindowText(_T("2")); // 删帖间隔 m_prefPage.m_confirmCheck.SetCheck(TRUE); // 操作前提示 m_prefPage.m_scanPageCountEdit.SetWindowText(_T("1")); // 扫描最后页数 m_prefPage.m_briefLogCheck.SetCheck(FALSE); // 只输出删帖封号 m_prefPage.m_deleteCheck.SetCheck(TRUE); // 删帖 m_prefPage.m_threadCountEdit.SetWindowText(_T("2")); // 线程数 m_prefPage.m_banReasonEdit.SetWindowText(_T("")); // 封禁原因 m_imagePage.m_dirEdit.SetWindowText(_T("")); // 违规图片目录 m_imagePage.m_thresholdEdit.SetWindowText(_T("2.43")); // 阈值 }