1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 |
void
Cdialog1Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 const
char
psDirName[] = "F:\\SQLyaog\\SQLyog Trial" ; TraveDir(( char
*)psDirName); //CDialogEx::OnOK(); } #define MAXSIZE 100 void
Cdialog1Dlg::TraveDir( char * psDirName) { CFileFind FindFile; //CFileFind类 long
hFile; char
szDir[MAXSIZE]; strcpy_s(szDir,MAXSIZE,psDirName); strcat_s(szDir,MAXSIZE, "\\*.*" ); hFile = FindFile.FindFile(_T(szDir)); if (!hFile) //判断此文件夹目录下有没有文件或文件夹(目录) { AfxMessageBox( "This directory is not exist file" ); return
; } else //如果有文件或文件夹(目录) { while (FindFile.FindNextFileA()) //顺序遍历文件夹目录,找出当前目录下文件夹,用递归法查找所用目录及其子目录,以便检索 { //IsDirectory判断此文件是否是文件夹(目录),IsDots判断此文件是否是"."当前目录".."上一层目录 //这一点很重要,不然程序会陷入死循环,在当前目录下循环,或遍历上一层目录再上一层目录。。。 if (FindFile.IsDirectory() && !FindFile.IsDots()) //important { char
szDirSpaceNext[MAXSIZE]; strcpy_s(szDirSpaceNext,MAXSIZE,psDirName); strcat_s(szDirSpaceNext,MAXSIZE, "\\" ); strcat_s(szDirSpaceNext,MAXSIZE,FindFile.GetFileName()); //记录当前文件是目录时的文件路径,以便下面递归调用 AfxMessageBox(szDirSpaceNext); TraveDir(( char *) szDirSpaceNext); //递归调用,遍历子目录。 } } } char
szDirSpace[MAXSIZE]; strcpy_s(szDirSpace,MAXSIZE,psDirName); strcat_s(szDirSpace,MAXSIZE, "\\*.exe" ); hFile = FindFile.FindFile(_T(szDirSpace)); //搜索目录下的所有exe文件。 while (hFile) //判断是否遍历完全到 { hFile = FindFile.FindNextFileA(); AfxMessageBox(( LPCTSTR )FindFile.GetFileName()); } /* 错误警示; 1.低级错误while(FindFile.FindNextFileA());原因是复制粘贴,粘贴了do while()中的while语句 2.下面这样做所得答案总是少一个满足要求的值。 if(hFile)//下面的没有去判断释放满足条件。 { while(FindFile.FindNextFileA());//注意这里的分号。 { AfxMessageBox((LPCTSTR)FindFile.GetFileName()); } } */ } |
还有这里忘记要Close了。
原文:http://www.cnblogs.com/jiaoluo/p/3523178.html