最近使用C#比較多,對於目錄操作DirectoryInfo和Directory這個類感覺用起來很方便,突然又要寫點C++代碼,也要使用目錄遍歷,想了想以前的經歷,記得好像MFC中的CFileFind類使用起來還算方便,但具體使用也忘了,又要花點時間去查下,還是記錄在這以後再使用來查閱也方便。
在VC++下使用CFileFind類,首先要在項目屬性設置中關於“MFC的使用”設置好,再在頭文件中包含 afx.h,最後就可以使用CFileFind類了。
具體使用還是看代碼,微軟提供的遍歷目錄的代碼:
void Recurse(LPCTSTR pstr)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
TRACE(_T("%sn"), (LPCTSTR)str);
Recurse(str);
}
}
finder.Close();
}
void PrintDirs()
{
Recurse(_T("C:"));
}
代碼說明:
1. 項目選用多字節字符集,不想去糾結_T, LPCTSRT等;
2. 關於TRACE,就是一個debug下的宏,差不多等於printf,具體參考:http://msdn.microsoft.com/en-us/library/4wyz8787(v=vs.90).aspx
3. CFileFind: FindNextFile一定要至少提前GetFileName等成員函數前調用一次,否則要報錯。所以bWorking = finder.FindNextFile();這行代碼放前面