用CfileFind遞歸搜索目錄

發表于:2007-07-14來源:作者:點擊數: 標簽:
我們知道CfileFind未提供直接遍歷其子目錄的功能,而有時候我們卻常常要遍歷某一目錄下的所有文件及其子目錄。如我們要刪除一個目錄,而這個目錄下又有子目錄,因為 Windows 不允許刪除非空的目錄,因此我們必須能夠遍歷一個目錄下的所有子目錄,這可以通過
我們知道CfileFind未提供直接遍歷其子目錄的功能,而有時候我們卻常常要遍歷某一目錄下的所有文件及其子目錄。如我們要刪除一個目錄,而這個目錄下又有子目錄,因為Windows不允許刪除非空的目錄,因此我們必須能夠遍歷一個目錄下的所有子目錄,這可以通過簡單的遞歸實現.

  下面讓我們從一個簡單的例子開始:如何刪除某一目錄?(假設我們通過DeleteDirectory(LPCTSTR DirName)函數完成這一功能)

  要刪除一個目錄,我們要完成下面幾步:

  1. 刪除該目錄下的所有文件

  2. 如果該目錄中還有子目錄我們要遞歸地調用DeleteDirectory(LPCTSTR DirName)函數,以刪除該子目錄下的所有文件

  3. 調用RemoveDirectory(LPCTSTR lpPathName)刪除該目錄

DeleteDirectory(LPCTSTR DirName)函數的完整實現如下:
BOOL DeleteDirectory(LPCTSTR DirName)
{
CFileFind tempFind; file://聲明一個CFileFind類變量,以用來搜索
char tempFileFind[200]; file://用于定義搜索格式
sprintf(tempFileFind,"%s\\*.*",DirName);
file://匹配格式為*.*,即該目錄下的所有文件

BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
file://查找第一個文件
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile(); file://遞歸搜索其他的文件
if(!tempFind.IsDots()) file://如果不是"."目錄
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory()) file://如果是目錄,則遞歸地調用
{ file://DeleteDirectory
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{ file://如果是文件則直接刪除之
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(DirName)) file://刪除目錄
{
AfxMessageBox("刪除目錄失??!",MB_OK);
return FALSE;
}
return TRUE;
}



  通過上面的例子,詳細讀者已學會了如何遞歸遍歷某一目錄下的所有文件及子目錄了。實際上利用這一點可以作出非常有用的工具。下面我給大家舉個小例子。

  用VC編寫程序的時候,VC會生成一大堆的中間文件,這些中間文件的體積十分龐大,一般比我們編寫的代碼要大出10倍以上。當我們想要把我們編寫的源代碼保留起來,以供以后查閱時,我們不得不手動刪除這些中間文件,而有些時候,你想查看以前某個工程的運行結果,于是你編譯該工程,經常這樣做的話,如果你不刪除VC生成的中間文件,你的硬盤很快就會被一大堆的中間文件塞滿。于是我編寫了一個VC的中間文件清理工具。其原理非常簡單:

  首先,讓用戶指定一個需要清理的目錄,然后我們通過CFileFind遞歸地遍歷該目錄,查找目錄名為Debug和Release的目錄(這是VC默認的輸出目錄,如果你更改了缺省設置的話,必須手動刪除之),然后調用上面我們編寫的DeleteDirectory函數刪除之。

  警告:使用該工具時,一定要確保你的工程沒有叫Debug或Release的,而且你的有用的目錄名也不能是Debug或Release,否則,使用本工具會全部把它們刪掉的。

  另外,本工具也能統計源程序的規模(給出整個工程的行數、c文件數、h文件數和cpp文件數及總的文件數目),你可以用它方便地統計出自己源程序的規模。統計源程序規模的原理也是遞歸地查找某一目錄,其原理和上面講的DeleteDirestory函數是一致的。

  有了該工具你再也不用手動清理自己機子上那一大堆的中間文件了,當你需要把自己的工程目錄保存起來,以供以后查閱時,你就可以通過該工具徹底地清理一下中間文件,平時你再也不用去管那些令人討厭的中間文件了。

  下載VC工程管理工具

  上面的程序在:Windows 2000 professional ,Visual C++英文企業版下調試通過。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97