DataFile.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef _DataFile_h_
  2. #define _DataFile_h_
  3. #include "..\..\common_h\FileService.h"
  4. #include "Archivator.h"
  5. class PackFile;
  6. //Файл для чтения данных
  7. class DataFileBase : public IDataFile
  8. {
  9. protected:
  10. DataFileBase(const char * _cppFileName, long _cppFileLine);
  11. virtual ~DataFileBase();
  12. public:
  13. //Закрыть файл сообщив об ошибке
  14. void ErrorRelease();
  15. public:
  16. //Закрыть файл
  17. virtual void Release();
  18. //Получить размер файла
  19. virtual dword Size() const;
  20. protected:
  21. dword size;
  22. #ifndef STOP_DEBUG
  23. const char * cppFileName;
  24. long cppFileLine;
  25. #endif
  26. };
  27. //Файл для чтения данных
  28. class DataFile : public DataFileBase
  29. {
  30. public:
  31. DataFile(const char * cppFileName, long cppFileLine);
  32. virtual ~DataFile();
  33. //Открыть файл
  34. bool Open(const char * realPath);
  35. //Прочитать данные, возвращает количество прочитаных байт
  36. //если поинтер null то читать во внутрений буффер
  37. //если режим noReadAccess, то память буфера не кэшируемая
  38. virtual dword Read(void * buffer, dword size, bool noReadAccess);
  39. private:
  40. HANDLE handle;
  41. };
  42. //Файл для чтения данных из неупакованного файла
  43. class DataFileMemUnpack : public DataFileBase
  44. {
  45. public:
  46. DataFileMemUnpack(const char * cppFileName, long cppFileLine, const byte * data, dword fileSize);
  47. virtual ~DataFileMemUnpack();
  48. public:
  49. //Прочитать данные, возвращает количество прочитаных байт
  50. //если поинтер null то читать во внутрений буффер
  51. //если режим noReadAccess, то память буфера не кэшируемая
  52. virtual dword Read(void * buffer, dword size, bool noReadAccess);
  53. private:
  54. const byte * ptr;
  55. const byte * stopPtr;
  56. ClassThread
  57. };
  58. //Файл для чтения данных из упакованного файла
  59. class DataFileMemPack : public DataFileBase
  60. {
  61. public:
  62. DataFileMemPack(const char * cppFileName, long cppFileLine, const byte * mem, dword packedSize, dword realSize);
  63. virtual ~DataFileMemPack();
  64. public:
  65. //Прочитать данные, возвращает количество прочитаных байт
  66. //если поинтер null то читать во внутрений буффер
  67. //если режим noReadAccess, то память буфера не кэшируемая
  68. virtual dword Read(void * buffer, dword size, bool noReadAccess);
  69. private:
  70. const byte * sourceData;
  71. dword sourceSize;
  72. XStreamDecompressor * decompressor;
  73. ClassThread
  74. };
  75. #endif