• MFC中对编码文件的操作01


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

    (1)、创建单例类

    1. public:
    2. static SetAllChinesefunctions*Instance();
    3. private:
    4. static SetAllChinesefunctions*_Instance;
    5. SetAllChinesefunctions*SetAllChinesefunctions::Instance()
    6. {
    7. if(nullptr == _Instance)
    8. {
    9. _Instance = new SetAllChinesefunctions;
    10. }
    11. return _Instance;
    12. }

    (2)、查找CFileFind类

    这个类用于查找指定根目录下面的文件和文件夹,或者特定的文件。

    1)、FindFile 函数会返回一个BOOL值,如果为1说明当前路径下还有文件或文件夹。参数是你指定的目录。

    2)、FindNextFile函数,无参数,查找下一个文件或者文件夹。

    3)、IsDots函数,无参数,用于判断当前文件夹是不是.或者..目录,是返回1。

    4)、IsDirectory函数,无参数,用于判断当前是不是文件夹,是文件夹返回1。

    1. CFileFind finder;
    2. CString searchPath = sPrjRoot + _T("\\*");//指定要去查找的路径
    3. BOOL bWorking = finder.FindFile(searchPath);//查找当前路径下面的文件和文件夹
    4. while (bWorking)
    5. {
    6. bWorking = finder.FindNextFile();
    7. if (finder.IsDots()) continue;
    8. if (finder.IsDirectory())
    9. {
    10. _iterfind(finder.GetFilePath());
    11. continue;
    12. }
    13. // 查找.h文件
    14. CString sFileName = finder.GetFileName();
    15. if (sFileName.Right(2).MakeLower() == _T(".h"))
    16. {
    17. _findDlgID(finder.GetFilePath());
    18. }
    19. }

    (3)、当前类CFindDlgIDAndClassFile全部代码

    1. #pragma once
    2. #include
    3. #include"../TMLCHelper/StdioFileCodePage.h"
    4. class CFindDlgIDAndClassFile
    5. {
    6. public:
    7. CFindDlgIDAndClassFile();
    8. ~CFindDlgIDAndClassFile();
    9. static CFindDlgIDAndClassFile* Instance();
    10. void Find(const CString& sPrjRoot);
    11. bool IsExistDlgID(const CString& sID)
    12. {
    13. return(m_mapDlgIDAndClassFile.find(sID) != m_mapDlgIDAndClassFile.end());
    14. }
    15. private:
    16. static CFindDlgIDAndClassFile* _Instance ;
    17. void _iterfind(const CString& sPrjRoot);
    18. void _findDlgID(const CString& sFileH);
    19. CString m_sRootPath;
    20. public:
    21. std::map m_mapDlgIDAndClassFile; // 对话框ID - 类文件子路径
    22. };
    23. #define FINDDLGANDCLASS (*CFindDlgIDAndClassFile::Instance())
    1. #include "stdafx.h"
    2. #include "FindDlgIDAndClassFile.h"
    3. #include
    4. #include
    5. //CFindDlgIDAndClassFile* _Instance = nullptr;
    6. CFindDlgIDAndClassFile::CFindDlgIDAndClassFile()
    7. {
    8. }
    9. CFindDlgIDAndClassFile::~CFindDlgIDAndClassFile()
    10. {
    11. }
    12. CFindDlgIDAndClassFile* CFindDlgIDAndClassFile::_Instance = nullptr; // 初始化 _Instance 为 nullptr
    13. CFindDlgIDAndClassFile* CFindDlgIDAndClassFile::Instance()
    14. {
    15. if (nullptr == _Instance)
    16. {
    17. _Instance = new CFindDlgIDAndClassFile;
    18. }
    19. return _Instance;
    20. }
    21. void CFindDlgIDAndClassFile::Find(const CString& sPrjRoot)
    22. {
    23. m_sRootPath = sPrjRoot;
    24. m_mapDlgIDAndClassFile.clear();
    25. _iterfind(sPrjRoot);
    26. }
    27. void CFindDlgIDAndClassFile::_iterfind(const CString& sPrjRoot)
    28. {
    29. CFileFind finder;
    30. CString searchPath = sPrjRoot + _T("\\*");//指定要去查找的路径
    31. BOOL bWorking = finder.FindFile(searchPath);//查找当前路径下面的文件和文件夹
    32. while (bWorking)
    33. {
    34. bWorking = finder.FindNextFile();
    35. if (finder.IsDots()) continue;
    36. if (finder.IsDirectory())
    37. {
    38. _iterfind(finder.GetFilePath());
    39. continue;
    40. }
    41. // 查找.h文件
    42. CString sFileName = finder.GetFileName();
    43. if (sFileName.Right(2).MakeLower() == _T(".h"))
    44. {
    45. _findDlgID(finder.GetFilePath());
    46. }
    47. }
    48. }
    49. void CFindDlgIDAndClassFile::_findDlgID(const CString& sFileH)
    50. {
    51. CString sFilePath = sFileH;
    52. bool bDesignTime = false;
    53. CString stxt;
    54. CStdioFileCodePage file;
    55. file.OpenWithoutType(sFileH, CFile::modeRead);
    56. file.JumpBOM();
    57. while (file.ReadStringWithOutType(stxt))
    58. {
    59. int ipos1 = stxt.Find(_T("IDD ="));
    60. int ipos2 = stxt.Find(_T("IDD="));
    61. if (ipos1 != -1 || ipos2 != -1)
    62. {
    63. int ipos = (ipos1 > 0) ? (ipos1 + 5) : (ipos2 + 4);
    64. int ipose = stxt.Find('}', ipos);
    65. CString sID;
    66. if (ipose == -1)
    67. {
    68. sID=stxt.Mid(ipos);
    69. }
    70. else
    71. {
    72. sID = stxt.Mid(ipos, ipose - ipos);
    73. }
    74. sID.TrimLeft();
    75. sID.TrimRight();
    76. sFilePath.Replace(m_sRootPath, _T(""));
    77. sFilePath.Replace(L".h", _T(""));
    78. m_mapDlgIDAndClassFile[sID] = sFilePath;
    79. file.Close();
    80. return;
    81. }
    82. }
    83. }

  • 相关阅读:
    防御保护----内容安全
    流密码:线性同余生成器 LCG
    Spring Boot面试系列-01
    数据库简介
    docker引擎学习
    springboot和spring对比
    现在还不是买入阿里巴巴的时候
    vim 编辑器使用学习
    朴素贝叶斯模型
    如何编写规范的交互文档
  • 原文地址:https://blog.csdn.net/qq_59328991/article/details/136193945