예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
std::string UnicodeToUtf8(const std::wstring& strUnicode) 
{
	std::string retval;

	if (strUnicode.size())
		retval = KUTF16_To_UTF8(strUnicode.c_str());

	return retval;
}
예제 #4
0
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;
}
예제 #5
0
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;
}   
예제 #6
0
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;
}
예제 #7
0
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;
}
예제 #8
0
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;
}