filemanager.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #pragma once
  2. #include "common.h"
  3. #include "rcglobal.h"
  4. #include <QString>
  5. #include <QObject>
  6. #include <QList>
  7. class ScintillaEditView;
  8. class ScintillaHexEditView;
  9. struct NewFileIdMgr {
  10. int index;
  11. ScintillaEditView* editView;
  12. NewFileIdMgr(int index_, ScintillaEditView* editView_):index(index_), editView(editView_)
  13. {
  14. }
  15. };
  16. //管理二进制文件的信息
  17. struct HexFileMgr {
  18. QString filePath;
  19. QFile* file;
  20. qint64 fileOffset;
  21. qint64 fileSize;
  22. qint16 lineSize;//每次读取多少行,默认为64行,没行16个字符
  23. char* contentBuf;
  24. int contentRealSize;
  25. HexFileMgr() :file(nullptr), fileOffset(0), lineSize(64), fileSize(0), contentBuf(nullptr), contentRealSize(0)
  26. {
  27. }
  28. void destory()
  29. {
  30. if (file != nullptr)
  31. {
  32. file->close();
  33. delete file;
  34. file = nullptr;
  35. }
  36. if (contentBuf != nullptr)
  37. {
  38. delete[]contentBuf;
  39. contentBuf = nullptr;
  40. }
  41. }
  42. private:
  43. HexFileMgr& operator=(const HexFileMgr&) = delete;
  44. HexFileMgr(const HexFileMgr&) = delete;
  45. };
  46. //管理大文本文件的信息
  47. struct TextFileMgr {
  48. QString filePath;
  49. QFile* file;
  50. qint64 fileOffset;
  51. qint64 fileSize;
  52. qint16 lineSize;//每次读取多少行,默认每次读取1024行。但是最大不超过1M的内容。
  53. char* contentBuf;
  54. int contentRealSize;
  55. TextFileMgr() :file(nullptr), fileOffset(0), lineSize(64), fileSize(0), contentBuf(nullptr), contentRealSize(0)
  56. {
  57. }
  58. void destory()
  59. {
  60. if (file != nullptr)
  61. {
  62. file->close();
  63. delete file;
  64. file = nullptr;
  65. }
  66. if (contentBuf != nullptr)
  67. {
  68. delete[]contentBuf;
  69. contentBuf = nullptr;
  70. }
  71. }
  72. private:
  73. TextFileMgr& operator=(const TextFileMgr&) = delete;
  74. TextFileMgr(const TextFileMgr&) = delete;
  75. };
  76. class CCNotePad;
  77. class FileManager:public QObject
  78. {
  79. Q_OBJECT
  80. public:
  81. ScintillaEditView* newEmptyDocument();
  82. ScintillaHexEditView * newEmptyHexDocument();
  83. int getNextNewFileId();
  84. void insertNewFileNode(NewFileIdMgr node);
  85. void delNewFileNode(int fileIndex);
  86. int loadFileDataInText(ScintillaEditView * editView, QString filePath, CODE_ID & fileTextCode, RC_LINE_FORM &lineEnd, CCNotePad * callbackObj=nullptr, bool hexAsk = true);
  87. int loadFileForSearch(ScintillaEditView * editView, QString filePath);
  88. //int loadFileData(ScintillaEditView * editView, QString filePath, CODE_ID & fileTextCode, RC_LINE_FORM & lineEnd);
  89. int loadFilePreNextPage(int dir, QString & filePath, HexFileMgr *& hexFileOut);
  90. int loadFilePreNextPage(int dir, QString & filePath, TextFileMgr *& hexFileOut);
  91. int loadFileFromAddr(QString filePath, qint64 addr, HexFileMgr *& hexFileOut);
  92. int loadFileFromAddr(QString filePath, qint64 addr, TextFileMgr *& hexFileOut);
  93. bool loadFileData(QString filePath, HexFileMgr * & hexFileOut);
  94. bool loadFileData(QString filePath, TextFileMgr *& textFileOut);
  95. HexFileMgr* getHexFileHand(QString filepath);
  96. void closeHexFileHand(QString filepath);
  97. void closeBigTextFileHand(QString filepath);
  98. LangType detectLanguageFromTextBegining(const unsigned char * data, size_t dataLen);
  99. static FileManager& getInstance() {
  100. static FileManager instance;
  101. return instance;
  102. };
  103. private:
  104. FileManager() = default;
  105. ~FileManager();
  106. FileManager(const FileManager&) = delete;
  107. FileManager& operator=(const FileManager&) = delete;
  108. QList<NewFileIdMgr> m_newFileIdList;
  109. QMap<QString, HexFileMgr*> m_hexFileMgr;
  110. QMap<QString, TextFileMgr*> m_bigTxtFileMgr;
  111. };