BOOL CFCacheImpl::DelDir(LPCWSTR lpDir) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; CStringW strDir; if (!m_pDbConnect) goto clean0; if (!lpDir) goto clean0; strDir = lpDir; strDir.MakeLower(); strSql.Format("delete from files where path like '%s%s'", KUTF16_To_UTF8(strDir), "%"); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); if (nRetCode) goto clean0; retval = TRUE; clean0: return retval; }
BOOL CFCacheImpl::AddFile( LPCWSTR lpFilePath, ULONGLONG qwFileSize ) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; CStringW strFilePath; CStringW strExt; int nExt; if (!m_pDbConnect) goto clean0; if (!lpFilePath) goto clean0; strFilePath = lpFilePath; strFilePath.MakeLower(); nExt = strFilePath.ReverseFind(_T('.')); if (nExt != -1 && nExt > strFilePath.ReverseFind(_T('\\'))) { strExt = strFilePath.Right(strFilePath.GetLength() - nExt); } if (strExt.IsEmpty()) { strExt = _T(".n/a"); } strSql.Format("insert into files values('%s', '%s', %I64d)", KUTF16_To_UTF8(strFilePath), KUTF16_To_UTF8(strExt), qwFileSize); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); if (nRetCode) goto clean0; retval = TRUE; clean0: return retval; }
std::string UnicodeToUtf8(const std::wstring& strUnicode) { std::string retval; if (strUnicode.size()) retval = KUTF16_To_UTF8(strUnicode.c_str()); return retval; }
BOOL CFCacheImpl::GetDirInfo( LPCWSTR lpDir, ULONGLONG& qwSize, ULONGLONG& qwCount ) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; CStringW strDir; sqlite3_stmt* pStmt = NULL; if (!m_pDbConnect) goto clean0; if (!lpDir) goto clean0; strDir = lpDir; strDir.MakeLower(); strSql.Format("select sum(size), count(size) from files where path like '%s\\%s'", KUTF16_To_UTF8(strDir), "%"); nRetCode = sqlite3_prepare(m_pDbConnect, strSql, -1, &pStmt, 0); if (nRetCode) goto clean0; nRetCode = sqlite3_step(pStmt); if (SQLITE_ROW != nRetCode) goto clean0; qwSize = sqlite3_column_int64(pStmt, 0); qwCount = sqlite3_column_int64(pStmt, 1); retval = TRUE; clean0: if (pStmt) { sqlite3_finalize(pStmt); pStmt = NULL; } return retval; }
BOOL CFCacheImpl::GetFileSize( LPCWSTR lpFilePath, ULONGLONG& qwSize ) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; CStringW strFilePath; sqlite3_stmt* pStmt = NULL; if (!m_pDbConnect) goto clean0; if (!lpFilePath) goto clean0; strFilePath = lpFilePath; strFilePath.MakeLower(); strSql.Format("select size from files where path = '%s'", KUTF16_To_UTF8(strFilePath)); nRetCode = sqlite3_prepare(m_pDbConnect, strSql, -1, &pStmt, 0); if (nRetCode) goto clean0; nRetCode = sqlite3_step(pStmt); if (SQLITE_ROW != nRetCode) goto clean0; qwSize = sqlite3_column_int64(pStmt, 0); retval = TRUE; clean0: if (pStmt) { sqlite3_finalize(pStmt); pStmt = NULL; } return retval; }
BOOL CStubbornFiles::_SaveToFile() { BOOL retval = FALSE; CDataFileLoader dataLoader; TiXmlDocument xmlDoc; TiXmlElement* pXmlItem = NULL; TiXmlElement* pXmlTime = NULL; TiXmlElement* pXmlItems = NULL; TiXmlText* pXmlText = NULL; TCHAR szConfPathTemp[MAX_PATH] = { 0 }; TCHAR szConfPath[MAX_PATH] = { 0 }; TiXmlDeclaration *pXmlDecl = new TiXmlDeclaration("1.0", "utf-8", "yes"); POSITION pos = NULL; CStringW strPathUtf16; CStringA strPathUtf8; CString strXmlUtf16; CStringA strXmlAnsi; LARGE_INTEGER ver; BOOL fRetCode; FILE* pFile = NULL; SYSTEMTIME sysTime = { 0 }; CStringA strTime; GetModuleFileName(NULL, szConfPath, MAX_PATH); PathRemoveFileSpec(szConfPath); _tcscpy_s(szConfPathTemp, MAX_PATH, szConfPath); PathAppend(szConfPathTemp, _T("data\\~strash.dat")); PathAppend(szConfPath, _T("data\\strash.dat")); xmlDoc.LinkEndChild(pXmlDecl); pXmlItems = new TiXmlElement("items"); if (!pXmlItems) goto clean0; pos = m_fileList.GetHeadPosition(); while (pos) { strPathUtf16 = m_fileList.GetNext(pos); strPathUtf8 = KUTF16_To_UTF8(strPathUtf16); pXmlText = new TiXmlText(strPathUtf8); if (!pXmlText) goto clean0; pXmlItem = new TiXmlElement("item"); if (!pXmlItem) goto clean0; pXmlItem->LinkEndChild(pXmlText); pXmlItems->LinkEndChild(pXmlItem); } xmlDoc.LinkEndChild(pXmlItems); GetLocalTime(&sysTime); strTime.Format("%d.%d.%d", sysTime.wYear, sysTime.wMonth, sysTime.wDay); pXmlTime = new TiXmlElement("time"); if (!pXmlTime) goto clean0; pXmlText = new TiXmlText(strTime); if (!pXmlText) goto clean0; pXmlTime->LinkEndChild(pXmlText); xmlDoc.LinkEndChild(pXmlTime); if (!xmlDoc.SaveFile(KUTF16_To_ANSI(szConfPathTemp))) goto clean0; pFile = _wfopen(szConfPathTemp, L"r"); if (!pFile) goto clean0; { fseek(pFile, 0, SEEK_END); int nSize = ftell(pFile); fseek(pFile, 0, SEEK_SET); char* pXml = strXmlAnsi.GetBuffer(nSize + 1); memset(pXml, 0, nSize + 1); fread(pXml, 1, nSize, pFile); fclose(pFile); pFile = NULL; strXmlAnsi.ReleaseBuffer(); strXmlUtf16 = KANSI_TO_UTF16(strXmlAnsi); } { ver.QuadPart = 1; fRetCode = dataLoader.Save( szConfPath, BkDatLibEncodeParam2(enumLibTypePlugine, ver, strXmlUtf16, 1).GetEncodeParam() ); } if (!fRetCode) goto clean0; retval = TRUE; clean0: if (pFile) { fclose(pFile); pFile = NULL; } if (GetFileAttributes(szConfPathTemp) != INVALID_FILE_ATTRIBUTES) { ::DeleteFile(szConfPathTemp); } return retval; }
BOOL CFCacheImpl::Query( IFCacheQueryback* piQueryback, FCacheQueryType queryType, void* pParam1, void* pParam2 ) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; sqlite3_stmt* pStmt = NULL; if (!m_pDbConnect) goto clean0; if (!piQueryback) goto clean0; if (enumFQT_Top == queryType) { if (!pParam1) goto clean0; strSql.Format("select path, size from top100 order by size desc limit %d", *(ULONG*)pParam1); nRetCode = sqlite3_prepare(m_pDbConnect, strSql, -1, &pStmt, 0); if (nRetCode) goto clean0; nRetCode = sqlite3_step(pStmt); if (SQLITE_ROW == nRetCode) goto get_data; sqlite3_finalize(pStmt); pStmt = NULL; strSql = "delete from top100"; nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); strSql = "insert into top100(path, size) select path, size from files order by size desc limit 500"; nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); if (nRetCode) goto clean0; strSql.Format("select path, size from top100 order by size desc limit %d", *(ULONG*)pParam1); } else if (enumFQT_Ext == queryType) { CStringA strExt; if (!pParam1) goto clean0; if (*(char*)pParam1 == '.') { strExt = (char*)pParam1; } else { strExt = "."; strExt += (char*)pParam1; } strSql.Format("select path, size from files where ext = '%s' order by size desc", strExt); } else if (enumFQT_Zone == queryType) { ULONGLONG qwFrom, qwTo; if (!pParam1 || !pParam2) goto clean0; qwFrom = *(ULONGLONG*)pParam1; qwTo = *(ULONGLONG*)pParam2; strSql.Format("select path, size from files where size >= %I64d and size <= %I64d order by size desc", qwFrom, qwTo); } else if (enumFQT_Word == queryType) { CStringW strWord; if (!pParam1) goto clean0; strWord = (const wchar_t*)pParam1; strSql.Format("select path, size from files where path like '%s%s%s' order by size desc", "%", KUTF16_To_UTF8(strWord), "%"); } strSql.MakeLower(); nRetCode = sqlite3_prepare(m_pDbConnect, strSql, -1, &pStmt, 0); if (nRetCode) goto clean0; nRetCode = sqlite3_step(pStmt); if (nRetCode != SQLITE_ROW) goto clean0; get_data: while (SQLITE_ROW == nRetCode) { CStringA strFilePath = (char*)sqlite3_column_text(pStmt, 0); ULONGLONG qwFileSize = sqlite3_column_int64(pStmt, 1); piQueryback->OnData(queryType, KUTF8_To_UTF16(strFilePath), qwFileSize); nRetCode = sqlite3_step(pStmt); } retval = TRUE; clean0: if (pStmt) { sqlite3_finalize(pStmt); pStmt = NULL; } return retval; }
BOOL CFCacheImpl::DelFile(LPCWSTR lpFilePath) { BOOL retval = FALSE; int nRetCode; char* szError = NULL; CStringA strSql; CStringW strFilePath; int nExt; CStringW strExt; sqlite3_stmt* pStmt = NULL; ULONGLONG qwSize; if (!m_pDbConnect) goto clean0; if (!lpFilePath) goto clean0; strFilePath = lpFilePath; strFilePath.MakeLower(); nExt = strFilePath.ReverseFind(_T('.')); if (nExt != -1 && nExt > strFilePath.ReverseFind(_T('\\'))) { strExt = strFilePath.Right(strFilePath.GetLength() - nExt); } if (strExt.IsEmpty()) { strExt = _T(".n/a"); } // 获得大小 strSql.Format("select size from files where path = '%s'", KUTF16_To_UTF8(strFilePath)); nRetCode = sqlite3_prepare(m_pDbConnect, strSql, -1, &pStmt, 0); if (nRetCode) goto clean0; nRetCode = sqlite3_step(pStmt); if (SQLITE_ROW != nRetCode) goto clean0; qwSize = sqlite3_column_int64(pStmt, 0); // 删除文件 strSql.Format("delete from files where path = '%s'", KUTF16_To_UTF8(strFilePath)); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); if (nRetCode) goto clean0; // 从Top100中删除 strSql.Format("delete from top100 where path = '%s'", KUTF16_To_UTF8(strFilePath)); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); // 从Exts中去除大小 strSql.Format("insert into exts values('%s', -%I64d, -1)", KUTF16_To_UTF8(strExt), qwSize); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); // 从总大小中去除大小 strSql.Format("insert into info values(-%I64d, -1)", qwSize); nRetCode = sqlite3_exec(m_pDbConnect, strSql, NULL, NULL, &szError); retval = TRUE; clean0: if (pStmt) { sqlite3_finalize(pStmt); pStmt = NULL; } return retval; }