VC產生的臨時文件有時真的很煩人!當你編譯一個程序,突然系統彈出一個對話框:“D盤已經沒有足夠的空間~~~~~~~~~請問需要進行磁盤清理嗎”,而它只能清掉了Nkb的東東,你有什麼理由不自己寫一個專門清理VC垃圾的小工具呢?隔一段時間運行一次,徹底清除指定類型的垃圾文件:干干淨淨,中國人,奇強!
很明顯,這個程序的核心代碼肯定是一個有通配符的功能的遞歸查找文件的函數。我的想法是先查找給定目錄下的所有符合條件的文件,再遞歸查找下級文件夾下所有符合條件的文件。為了保證其封閉性,我用了一個 CStringList& 變量來保存搜索結果。如果您有好的建議,請給我發郵件。下面是代碼: CStringList& CDelTempDlg::SearchFile(CString strFileName,
CString strPath,
CStringList &listFileName)
{
char szFullPathName[MAX_PATH];
/*static*/ WIN32_FIND_DATA findData;
SetCurrentDirectory(strPath);
HANDLE hFindHandle = FindFirstFile(strFileName, &findData);
if ((hFindHandle != INVALID_HANDLE_VALUE))
{
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
GetFullPathName(findData.cFileName,
MAX_PATH,
szFullPathName,
NULL);
listFileName.AddTail(szFullPathName);
}
while (FindNextFile(hFindHandle, &findData) != 0)
{
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
GetFullPathName(findData.cFileName,
MAX_PATH,
szFullPathName,
NULL);
listFileName.AddTail(szFullPathName);
}
}
FindClose(hFindHandle);
}
hFindHandle = FindFirstFile(\"*\", &findData);
if ((hFindHandle != INVALID_HANDLE_VALUE))
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (findData.cFileName[0] != \''.\'')
{
SearchFile(strFileName,
findData.cFileName,
listFileName);
SetCurrentDirectory(\"..\");
}
}
while (FindNextFile(hFindHandle, &findData) != 0)
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (findData.cFileName[0] != \''.\'')
{
SearchFile(strFileName,
findData.cFileName,
listFileName);
SetCurrentDirectory(\"..\");
}
}
}
FindClose(hFindHandle);
}
return listFileName;
}
另外,程序中還用到了 SHBrowseForFolder、SHGetPathFromIDList 兩個API函數來打開文件夾選擇的對話框,GetProvateProfileInt、Get(/Write)PrivateProfileString、WritePrivateProfileSection 等函數以方便用戶自定義文件類型。因為程序比較簡單,裡面的一些錯誤信息顯示也就沒有單獨抽象出來。不提倡讀者這樣寫,呵呵。
程序在VC6.0、Win2000Pro下編譯通過。
本文配套源碼