在SDI項目內,通過使用CFileDialog和CFileFind類,不僅可以實現Windows桌面上現有的查找功能,而且可以靈活擴展查找條件.例如,下面的程序將在VisualC++6.0的Output窗口內逐行輸出c:\windows下所有長度小於500字節的只讀文件:
#include /*含有 _getcwd,_chdir原型*/ void f0(){ char x[256],y[256]; CFileDialog fd(TRUE); /*用TRUE值構造"File Open"對話框*/ _getcwd(x,256); /* 當前工作目錄存入x數組*/ if (fd.DoModal()==IDOK){ /*在CfileDialog對話過程中, 先選定c:\windows目錄, 再選定其下一普通文件,如Notepad.exe, 或輸入一不存在的文件,如f0.non*/ _getcwd(y,256); /*當前工作目錄c:\windows存入y數組*/ f1(y); /*用y內容調用f1函數*/ } _chdir(x); /*當前工作目錄置回x內容*/ } void f1(CString x){ BOOL b;CFileFind f; /*考慮到遞歸,只能使用局部變量*/ _chdir(x); b=f.FindFile("*.*"); /*當前工作目錄置成實參x, 然後查其下所有文件*/ while(b){ b=f.FindNextFile(); if (f.IsDirectory()){ /*當前文件是目錄*/ if (!f.IsDots()) { f1(f.GetFilePath()); /*目錄文件非"."和"..", 則用全路徑調用自身*/ } } else if (f.IsReadOnly()&&f.GetLength ()<500){ afxDump< < "\n"; afxDump< < f.GetFilePath(); /*輸出長度小於500字節的只讀文件的文件*/ } } }
待程序正常結束後,Output窗口將顯示執行結果.另外,經用CmemoryState類檢查,已證明此段程序未導致內存洩漏.