Files
dnf-utils/libnpk/source/libNPK_FileStream.h
T
2025-09-02 22:45:41 +08:00

62 lines
1.3 KiB
C++

#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);
};
}