Posted on 2008-01-22 15:35
天之驕子 閱讀(481)
評論(0) 編輯 收藏 引用
我們知道CfileFind未提供直接遍歷其子目錄的功能,而有時候我們卻常常要遍歷某一目錄下的所有文件及其子目錄。如我們要刪除一個目錄,而這個目錄下又有子目錄,因為Windows不允許刪除非空的目錄,因此我們必須能夠遍歷一個目錄下的所有子目錄,這可以通過簡單的遞歸實(shí)現(xiàn).
下面讓我們從一個簡單的例子開始:如何刪除某一目錄?(假設(shè)我們通過DeleteDirectory(LPCTSTR DirName)函數(shù)完成這一功能)
要刪除一個目錄,我們要完成下面幾步:
1. 刪除該目錄下的所有文件
2. 如果該目錄中還有子目錄我們要遞歸地調(diào)用DeleteDirectory(LPCTSTR DirName)函數(shù),以刪除該子目錄下的所有文件
3. 調(diào)用RemoveDirectory(LPCTSTR lpPathName)刪除該目錄
DeleteDirectory(LPCTSTR DirName)函數(shù)的完整實(shí)現(xiàn)如下: 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://如果是目錄,則遞歸地調(diào)用 { 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; }
|
通過上面的例子,詳細(xì)讀者已學(xué)會了如何遞歸遍歷某一目錄下的所有文件及子目錄了。