2018-12-08 23:44:41 -07:00
|
|
|
#include "CFileInStream.h"
|
|
|
|
|
|
2020-06-11 11:26:46 -04:00
|
|
|
CFileInStream::CFileInStream() = default;
|
2018-12-08 23:44:41 -07:00
|
|
|
|
|
|
|
|
CFileInStream::CFileInStream(const TString& rkFile)
|
|
|
|
|
{
|
2025-12-23 14:15:09 -05:00
|
|
|
Open(rkFile, std::endian::big);
|
2018-12-08 23:44:41 -07:00
|
|
|
}
|
|
|
|
|
|
2025-12-23 14:15:09 -05:00
|
|
|
CFileInStream::CFileInStream(const TString& rkFile, std::endian FileEndianness)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
Open(rkFile, FileEndianness);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CFileInStream::CFileInStream(const CFileInStream& rkSrc)
|
|
|
|
|
{
|
|
|
|
|
Open(rkSrc.mName, rkSrc.mDataEndianness);
|
|
|
|
|
|
|
|
|
|
if (rkSrc.IsValid())
|
|
|
|
|
Seek(rkSrc.Tell(), SEEK_SET);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CFileInStream::~CFileInStream()
|
|
|
|
|
{
|
|
|
|
|
if (IsValid())
|
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-23 14:15:09 -05:00
|
|
|
void CFileInStream::Open(const TString& rkFile, std::endian FileEndianness)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
if (IsValid())
|
|
|
|
|
Close();
|
|
|
|
|
|
2019-05-24 21:49:56 -10:00
|
|
|
#ifdef _WIN32
|
2018-12-23 21:44:02 -07:00
|
|
|
_wfopen_s(&mpFStream, ToWChar(rkFile), L"rb");
|
2019-05-24 21:49:56 -10:00
|
|
|
#else
|
|
|
|
|
mpFStream = fopen(*rkFile, "rb");
|
|
|
|
|
#endif
|
2018-12-08 23:44:41 -07:00
|
|
|
mName = rkFile;
|
|
|
|
|
mDataEndianness = FileEndianness;
|
|
|
|
|
|
|
|
|
|
if (IsValid())
|
|
|
|
|
{
|
|
|
|
|
Seek(0x0, SEEK_END);
|
|
|
|
|
mFileSize = Tell();
|
|
|
|
|
Seek(0x0, SEEK_SET);
|
|
|
|
|
}
|
|
|
|
|
else
|
2026-01-11 11:00:26 -05:00
|
|
|
{
|
2018-12-08 23:44:41 -07:00
|
|
|
mFileSize = 0;
|
2026-01-11 11:00:26 -05:00
|
|
|
}
|
2018-12-08 23:44:41 -07:00
|
|
|
|
|
|
|
|
SetSourceString(rkFile.GetFileName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CFileInStream::Close()
|
|
|
|
|
{
|
|
|
|
|
if (IsValid())
|
|
|
|
|
fclose(mpFStream);
|
|
|
|
|
mpFStream = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
void CFileInStream::ReadBytes(void *pDst, uint32_t Count)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
2026-01-11 11:00:26 -05:00
|
|
|
if (!IsValid())
|
|
|
|
|
return;
|
|
|
|
|
|
2018-12-08 23:44:41 -07:00
|
|
|
fread(pDst, 1, Count, mpFStream);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
bool CFileInStream::Seek(int32_t Offset, uint32_t Origin)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
2026-01-11 11:00:26 -05:00
|
|
|
if (!IsValid())
|
|
|
|
|
return false;
|
|
|
|
|
|
2026-02-09 08:25:03 -05:00
|
|
|
return (fseek(mpFStream, Offset, Origin) == 0);
|
2018-12-08 23:44:41 -07:00
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
bool CFileInStream::Seek64(int64_t Offset, uint32_t Origin)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
2026-01-11 11:00:26 -05:00
|
|
|
if (!IsValid())
|
|
|
|
|
return false;
|
|
|
|
|
|
2019-05-24 21:49:56 -10:00
|
|
|
#ifdef _WIN32
|
2026-02-09 08:25:03 -05:00
|
|
|
return (_fseeki64(mpFStream, Offset, Origin) == 0);
|
2019-05-24 21:49:56 -10:00
|
|
|
#else
|
2026-02-09 08:25:03 -05:00
|
|
|
return (fseeko(mpFStream, Offset, Origin) == 0);
|
2019-05-24 21:49:56 -10:00
|
|
|
#endif
|
2018-12-08 23:44:41 -07:00
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
uint32_t CFileInStream::Tell() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
2026-01-11 11:00:26 -05:00
|
|
|
if (!IsValid())
|
|
|
|
|
return 0;
|
|
|
|
|
|
2018-12-08 23:44:41 -07:00
|
|
|
return ftell(mpFStream);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
uint64_t CFileInStream::Tell64() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
2026-01-11 11:00:26 -05:00
|
|
|
if (!IsValid())
|
|
|
|
|
return 0;
|
|
|
|
|
|
2019-05-24 21:49:56 -10:00
|
|
|
#ifdef _WIN32
|
2018-12-08 23:44:41 -07:00
|
|
|
return _ftelli64(mpFStream);
|
2019-05-24 21:49:56 -10:00
|
|
|
#else
|
|
|
|
|
return ftello(mpFStream);
|
|
|
|
|
#endif
|
2018-12-08 23:44:41 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CFileInStream::EoF() const
|
|
|
|
|
{
|
|
|
|
|
return (Tell() >= mFileSize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CFileInStream::IsValid() const
|
|
|
|
|
{
|
|
|
|
|
return (mpFStream != 0);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-11 11:00:26 -05:00
|
|
|
uint32_t CFileInStream::Size() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
return mFileSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TString CFileInStream::FileName() const
|
|
|
|
|
{
|
|
|
|
|
return mName;
|
|
|
|
|
}
|