自己寫了一個MFC下的搜索文件的函數,遞歸遍歷各級子目錄搜索,對大小寫不敏感。遞歸是個好東西啊,用遞歸寫出來的東西往往代碼簡短,但不容易理解,並且容易出錯,要多加注意。此函數畢竟只是個代碼不足30行的小東西。目前存在缺點:不支持通配符*?等。後續將改進。 調用示例: CStringArray aStrFile; int i = CFindFile(_T("D:\\"),_T("qq.txt"),&aStrFile); 函數代碼: [cpp] //第一個參數為要搜索的路徑,比如"c:\\dir\\"或"c:\\dir"則在包括此目錄的所有子目錄下搜索 //第二個參數為要搜索的文件,比如"qq.txt",需要提供文件後綴,大小寫不敏感 //第三個參數用於保存搜索到的文件的全路徑,請構造一個CStringArray對象並傳入地址 INT CFindFile(const TCHAR *szPath,const TCHAR *szFileName,CStringArray *paStrResult) { ASSERT(paStrResult!=NULL); CString StrPath(szPath); CString StrFileName(szFileName); //檢查路徑字符串的最後一個字符是不是'\',不是則加上 if (StrPath[StrPath.GetLength()-1]!=_T('\\')) StrPath += _T('\\'); CString StrFindPath = StrPath + _T("*.*"); //開始查找 CFileFind finder; BOOL bWorking = finder.FindFile(StrFindPath); while(bWorking) { bWorking = finder.FindNextFile(); //如果找到的是文件夾,遞歸進去 if (finder.IsDirectory()&&!finder.IsDots()) { CFindFile(StrPath+finder.GetFileName(),StrFileName,paStrResult); } //如果找到了文件,將絕對路徑添加進字符串數組,大小寫不敏感 if (finder.GetFileName().CompareNoCase(StrFileName)==0) { paStrResult->Add(finder.GetFilePath()); } } //返回找到的文件個數 INT nFile = paStrResult->GetSize(); return nFile; }