用递归做文件夹中所有文件的提取(感谢[titilima ]的文章)

来源:互联网 发布:java pdf ocr识别文字 编辑:程序博客网 时间:2024/04/27 18:10
 头文件:
  1. #pragma once
  2. #include "afxcoll.h"
  3. // CSeachFile
  4. class CSeachFile : public CWnd
  5. {
  6.     DECLARE_DYNAMIC(CSeachFile)
  7. public:
  8.     CSeachFile();
  9.     void Start(CString rootPath);
  10.     CStringList GetFilesList();
  11.     CStringList plist;
  12.     virtual ~CSeachFile();
  13. protected:
  14.     DECLARE_MESSAGE_MAP()
  15. private:
  16.     CString path_;
  17. };
文件中的Start方法就是递归函数,plist就是存储提取出来的文件名的集合类
  1. // SeachFile.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "ImportExport.h"
  5. #include "SeachFile.h"
  6. #include "afxcoll.h"
  7. // CSeachFile
  8. IMPLEMENT_DYNAMIC(CSeachFile, CWnd)
  9. CSeachFile::CSeachFile()
  10. {
  11. }
  12. void CSeachFile::Start(CString rootPath)
  13. {
  14.     //判断是否为跟目录           
  15.     int len = rootPath.GetLength();
  16.     CString path(rootPath);
  17.     if(len == 3)
  18.     {
  19.     }
  20.     else
  21.     {
  22.         CString opr("//");
  23.         path = path + opr;
  24.     }
  25.     CString fname("*.*");
  26.     path = path + fname;
  27.     WIN32_FIND_DATA wfd;
  28.     HANDLE hFind = FindFirstFile(path,&wfd);
  29.     if(hFind == INVALID_HANDLE_VALUE)
  30.         return ;
  31.     do
  32.     {
  33.         if(wfd.cFileName[0] == '.')
  34.             continue ;
  35.         if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  36.         {
  37.            //如果是目录就递归
  38.             TCHAR szFile[MAX_PATH];
  39.             wsprintf(szFile,L"%s//%s",rootPath,wfd.cFileName);
  40.             Start(szFile);
  41.         }
  42.         else
  43.         {
  44.            //是文件就存储
  45.             plist.AddTail(wfd.cFileName);
  46.         }
  47.     }while(FindNextFile(hFind,&wfd));
  48. }
  49. CSeachFile::~CSeachFile()
  50. {
  51. }
  52. BEGIN_MESSAGE_MAP(CSeachFile, CWnd)
  53. END_MESSAGE_MAP()
  54. // CSeachFile 消息处理程序