主页 > 游戏开发  > 

MFC中对编码文件的操作01


1、自定义类获取项目中全部对话框ID和头文件子路径

(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 <map> #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<CString, CString> m_mapDlgIDAndClassFile; // 对话框ID - 类文件子路径 }; #define FINDDLGANDCLASS (*CFindDlgIDAndClassFile::Instance()) #include "stdafx.h" #include "FindDlgIDAndClassFile.h" #include <fstream> #include <string> //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; } } }

标签:

MFC中对编码文件的操作01由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MFC中对编码文件的操作01