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

    xiaoxiao2022-07-03  153

    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  来源:  原文:https://blog.csdn.net/xuyangcao123/article/details/81023552 版权声明:本文为博主原创文章,转载请附上博文链接!

    最新回复(0)