Last Update: Jun.1,2001

C Source Library

「Borland C++ 5.5」でコンパイル出来ます。

■ ttfCache, ShellIconCache などを削除

/*
 *  cleanup.c : ttfCache, ShellIconCache などを削除
 *
 *  Copyright (c) 2001 AOK. 
 *  
 *      2001.6.1 - 初版
 *
 *  ttfCache          - フォント表示がおかしくなったとき消す
 *  ShellIconCache    - アイコン表示がおかしくなったとき消す
 *  テンポラリファイル - 増えすぎるとディスクスペースの無駄!
 *
 */
 
#include <windows.h>
#include <stdio.h>

/* GetLastError() のメッセージを表示*/
void ShowErrMessage(void)
{
    LPVOID lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf, 0, NULL);
    printf("Error: %s", lpMsgBuf);
    LocalFree(lpMsgBuf);
}

/* ファイルを削除する */
void DeleteWithMessage(char *szFileName)
{
    if (SetFileAttributes(szFileName, FILE_ATTRIBUTE_ARCHIVE))
    {
        if (!DeleteFile(szFileName))
        {
            ShowErrMessage();
            printf("× %s を削除できません.\n\n", szFileName);
        }
        else
            printf("○ %s を削除.\n\n", szFileName);
    }
    else
    {
        ShowErrMessage();
        printf("× %s の属性変更が出来ません.\n\n", szFileName);
    }
}

/* メインルーチン */
int main()
{
    char szPath[MAX_PATH+1];
    WIN32_FIND_DATA wfd;
    HANDLE hf;
    
    GetWindowsDirectory(szPath, MAX_PATH);
    printf("--- ディレクトリの移動: %s\n", szPath);
    if (SetCurrentDirectory(szPath))
    {
        DeleteWithMessage("ttfCache");
        DeleteWithMessage("ShellIconCache");
    }
    else
    {
        ShowErrMessage();
        printf("× %s に移動できません.\n\n", szPath);
    }
    GetTempPath(MAX_PATH, szPath);
    printf("--- ディレクトリの移動: %s\n", szPath);
    if (SetCurrentDirectory(szPath))
    {
        hf = FindFirstFile("*.?MP", &wfd);
        if (hf != INVALID_HANDLE_VALUE)
        {
            DeleteWithMessage(wfd.cFileName);
            while (FindNextFile(hf, &wfd))
                DeleteWithMessage(wfd.cFileName);
            FindClose(hf);
        }
    }
    else
    {
        ShowErrMessage();
        printf("× %s に移動できません.\n\n", szPath);
    }

    return 0;
}