#pragma once #include "libNPK.h" #include "libNPK_NPKFile.h" namespace NPK { class CFileStream : public IFileStream { public: virtual const char* name(void) const { return m_fileName.c_str(); } virtual uint32_t size(void) const { return m_fileSize; } virtual uint32_t read(void* buffer, uint32_t size); virtual bool seek(uint32_t offset); virtual uint32_t tell(void) const { return m_currentOffset; } virtual uint32_t crc32(void); virtual bool isEOF(void) const { return m_currentOffset >= m_fileSize; } virtual bool writeToDiskFile(const wchar_t* diskPathFile); protected: //Pack file CNPKFile* m_pNPKFile; // windows file handle HANDLE m_hFileandle; std::string m_fileName; //offset of the file in the pak file const uint32_t m_fileOffset = 0; //size of the file const uint32_t m_fileSize = 0; //current read offset in the file uint32_t m_currentOffset = 0; //CRC32 checksum of the file uint32_t m_crc32 = 0; //Flag to indicate if CRC32 has been calculated bool m_crc32Calculated = false; private: CFileStream(CNPKFile* pNPKFile, HANDLE hFile, const FileItemBaseInfo& baseFileInfo); virtual ~CFileStream(); friend IFileStream* CNPKFile::openFileStream(const char* szFileName); friend void CNPKFile::closeFileStream(IFileStream* fileStream); }; }