首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC 開發實戰:自動掃描並清理編譯產生的臨時文件

     編輯:關於VC++

Visual C++ 開發過程中,編譯器會在專案目錄下產生大量臨時文件(如 .obj、.pch、.idb、.ncb 等),這些檔案不僅佔用磁碟空間,還常導致版本控制衝突。本文分享一個實用的小工具,能遞歸掃描指定目錄,依據通配符精準刪除 VC 產生的垃圾檔案,讓開發環境保持乾淨。

核心邏輯:支援通配符的遞歸檔案搜尋

工具的核心是一個遞歸函式 SearchFile,它接受檔案名模式(含通配符)、起始路徑,並將符合條件的完整路徑存入 CStringList。演算法分兩階段:

  1. 在目前目錄下用 FindFirstFile/FindNextFile 找出所有符合模式的檔案(排除目錄),取得完整路徑後加入列表。
  2. 再次掃描目前目錄下的所有子目錄(略過 . 和 ..),對每個子目錄遞歸呼叫自身,並在返回前用 SetCurrentDirectory("..") 回到父目錄。

關鍵程式碼片段

CStringList& CDelTempDlg::SearchFile(CString strFileName,
    CString strPath,
    CStringList &listFileName)
{
    char szFullPathName[MAX_PATH];
    WIN32_FIND_DATA findData;

    SetCurrentDirectory(strPath);

    HANDLE hFindHandle = FindFirstFile(strFileName, &findData);
    if (hFindHandle != INVALID_HANDLE_VALUE)
    {
        do
        {
            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            {
                GetFullPathName(findData.cFileName, MAX_PATH, szFullPathName, NULL);
                listFileName.AddTail(szFullPathName);
            }
        } while (FindNextFile(hFindHandle, &findData));
        FindClose(hFindHandle);
    }

    // 遞歸處理子目錄
    hFindHandle = FindFirstFile("*", &findData);
    if (hFindHandle != INVALID_HANDLE_VALUE)
    {
        do
        {
            if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && findData.cFileName[0] != '.')
            {
                SearchFile(strFileName, findData.cFileName, listFileName);
                SetCurrentDirectory("..");
            }
        } while (FindNextFile(hFindHandle, &findData));
        FindClose(hFindHandle);
    }
    return listFileName;
}

輔助功能:資料夾選擇與使用者自訂

  • 採用 SHBrowseForFolder + SHGetPathFromIDList 讓使用者圖形化選擇掃描根目錄。
  • 透過 GetPrivateProfileInt、WritePrivateProfileString 等 INI 檔操作,支援使用者自訂要清理的副檔名清單(預設包含 *.obj, *.pch, *.idb, *.ncb, *.opt, *.aps 等)。

建置與測試環境

  • 開發環境:Visual C++ 6.0
  • 測試平台:Windows 2000 Professional
  • 編譯通過,可直接執行。

定期執行此工具,即可徹底清除專案目錄下的 VC 臨時檔案,避免磁碟空間不足的彈窗干擾,也能減少版控倉庫體積。原始碼結構簡單,適合作為檔案系統操作的教學範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved