MFC下遍历文件夹下的所有文件,借助于CString类和CFileFind类的便捷

MFC下遍历文件夹下的所有文件,借助于CString类和CFileFind类的便捷,代码如下:

只有一层文件结构

很多时候我们要处理的文件只在一个特定的文件夹下,且该路径下除了待处理的文件之外没有其他文件夹,这时情况比较简单,不需要迭代处理,直接按照下面的操作即可:

    CString filepath = _T("/path/to/folder/"); 
    CString filename = _T("");
    CString fullname = _T("");

    CFileFind find;
    BOOL IsFind = find.FindFile(filepath + _T("/*.*"));

    while (IsFind)
    {
        IsFind = find.FindNextFile();
        if (find.IsDots())
        {
            continue;
        }
        else
        {
            filename = find.GetFileName();
            fullname = filepath + filename;
            cout << fullname << endl;
        }
    }

多层文件结构

有时候我们处理的文件有多个文件结构,也就是说文件夹下面还有文件夹,这时候需要采用递归的方式遍历。举个例子,比如我们要处理一批后缀名为.bmp的文件,且这些文件在一个根目录下面的很多子目录下,那么我们可以这样处理:

void BroseAllFiles(CString filepath)
{
    //检测路径是否正确并添加必要信息
    if (filepath == _T(""))
    {
        return;
    }
    else 
    {
        if (filepath.Right(1) != _T(""))
        {
            filepath += _T("\\");
        }
        filepath += _T("*.*");
    }

    //递归枚举文件夹下的内容
    CFileFind find;
    CString strpath;
    CString str_fileName;
    CString fullname;
    BOOL IsFind = find.FindFile(filepath);

    while (IsFind)
    {
        IsFind = find.FindNextFile();
        strpath = find.GetFilePath();

        if (find.IsDirectory() && !find.IsDots())
        {
            BroseAllFiles(strpath);
        }
        else if (!find.IsDierctory() && !find.IsDots())
        {
            str_fileName = find.GetFileName();
            if (str_fileName.Right(3) == _T("bmp")) //如果后缀是bmp文件才处理
            {
                fullname = strpath + str_fileName;
                cout << fullname << endl;
            }
        }
        else 
        {
            continue;
        }
    }
}

注:这个函数是对照参考资料写的,没有经过实际验证,如果出错请自行修改。
--------------------- 
作者:new_xuyangcao 
来源:CSDN 
原文:https://blog.csdn.net/xuyangcao123/article/details/81023552
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(MFC+OPENCV,MFC)