(1)、创建单例类
- public:
- static SetAllChinesefunctions*Instance();
- private:
- static SetAllChinesefunctions*_Instance;
-
-
- SetAllChinesefunctions*SetAllChinesefunctions::Instance()
- {
- if(nullptr == _Instance)
- {
- _Instance = new SetAllChinesefunctions;
- }
- return _Instance;
- }
(2)、查找CFileFind类
这个类用于查找指定根目录下面的文件和文件夹,或者特定的文件。
1)、FindFile 函数会返回一个BOOL值,如果为1说明当前路径下还有文件或文件夹。参数是你指定的目录。
2)、FindNextFile函数,无参数,查找下一个文件或者文件夹。
3)、IsDots函数,无参数,用于判断当前文件夹是不是.或者..目录,是返回1。
4)、IsDirectory函数,无参数,用于判断当前是不是文件夹,是文件夹返回1。
- CFileFind finder;
- CString searchPath = sPrjRoot + _T("\\*");//指定要去查找的路径
- BOOL bWorking = finder.FindFile(searchPath);//查找当前路径下面的文件和文件夹
- while (bWorking)
- {
- bWorking = finder.FindNextFile();
-
- if (finder.IsDots()) continue;
-
- if (finder.IsDirectory())
- {
- _iterfind(finder.GetFilePath());
- continue;
- }
-
- // 查找.h文件
- CString sFileName = finder.GetFileName();
- if (sFileName.Right(2).MakeLower() == _T(".h"))
- {
- _findDlgID(finder.GetFilePath());
- }
- }
(3)、当前类CFindDlgIDAndClassFile全部代码
- #pragma once
- #include
- #include"../TMLCHelper/StdioFileCodePage.h"
-
- class CFindDlgIDAndClassFile
- {
- public:
- CFindDlgIDAndClassFile();
- ~CFindDlgIDAndClassFile();
- static CFindDlgIDAndClassFile* Instance();
- void Find(const CString& sPrjRoot);
-
- bool IsExistDlgID(const CString& sID)
- {
- return(m_mapDlgIDAndClassFile.find(sID) != m_mapDlgIDAndClassFile.end());
- }
-
- private:
- static CFindDlgIDAndClassFile* _Instance ;
- void _iterfind(const CString& sPrjRoot);
- void _findDlgID(const CString& sFileH);
- CString m_sRootPath;
- public:
- std::map
m_mapDlgIDAndClassFile; // 对话框ID - 类文件子路径 - };
-
- #define FINDDLGANDCLASS (*CFindDlgIDAndClassFile::Instance())
-
- #include "stdafx.h"
- #include "FindDlgIDAndClassFile.h"
- #include
- #include
-
- //CFindDlgIDAndClassFile* _Instance = nullptr;
-
- CFindDlgIDAndClassFile::CFindDlgIDAndClassFile()
- {
- }
-
-
- CFindDlgIDAndClassFile::~CFindDlgIDAndClassFile()
- {
- }
- CFindDlgIDAndClassFile* CFindDlgIDAndClassFile::_Instance = nullptr; // 初始化 _Instance 为 nullptr
- CFindDlgIDAndClassFile* CFindDlgIDAndClassFile::Instance()
- {
- if (nullptr == _Instance)
- {
- _Instance = new CFindDlgIDAndClassFile;
- }
-
- return _Instance;
- }
-
- void CFindDlgIDAndClassFile::Find(const CString& sPrjRoot)
- {
- m_sRootPath = sPrjRoot;
- m_mapDlgIDAndClassFile.clear();
- _iterfind(sPrjRoot);
- }
-
-
- void CFindDlgIDAndClassFile::_iterfind(const CString& sPrjRoot)
- {
- CFileFind finder;
- CString searchPath = sPrjRoot + _T("\\*");//指定要去查找的路径
- BOOL bWorking = finder.FindFile(searchPath);//查找当前路径下面的文件和文件夹
- while (bWorking)
- {
- bWorking = finder.FindNextFile();
-
- if (finder.IsDots()) continue;
-
- if (finder.IsDirectory())
- {
- _iterfind(finder.GetFilePath());
- continue;
- }
-
- // 查找.h文件
- CString sFileName = finder.GetFileName();
- if (sFileName.Right(2).MakeLower() == _T(".h"))
- {
- _findDlgID(finder.GetFilePath());
- }
- }
- }
-
- void CFindDlgIDAndClassFile::_findDlgID(const CString& sFileH)
- {
- CString sFilePath = sFileH;
- bool bDesignTime = false;
-
- CString stxt;
- CStdioFileCodePage file;
- file.OpenWithoutType(sFileH, CFile::modeRead);
- file.JumpBOM();
- while (file.ReadStringWithOutType(stxt))
- {
- int ipos1 = stxt.Find(_T("IDD ="));
- int ipos2 = stxt.Find(_T("IDD="));
- if (ipos1 != -1 || ipos2 != -1)
- {
- int ipos = (ipos1 > 0) ? (ipos1 + 5) : (ipos2 + 4);
- int ipose = stxt.Find('}', ipos);
- CString sID;
- if (ipose == -1)
- {
- sID=stxt.Mid(ipos);
- }
- else
- {
- sID = stxt.Mid(ipos, ipose - ipos);
- }
-
- sID.TrimLeft();
- sID.TrimRight();
- sFilePath.Replace(m_sRootPath, _T(""));
- sFilePath.Replace(L".h", _T(""));
- m_mapDlgIDAndClassFile[sID] = sFilePath;
- file.Close();
- return;
- }
- }
- }
-
-