小记——文件遍历

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了。

小记——文件遍历

上一篇:[Leetcode 33]有序旋转数组找值Search in Rotated Sorted Array


下一篇:【CodeLab 科技创新营】“蚂蚁不只会催我还花呗,还会催我写代码”