Files

130 lines
2.2 KiB
C++
Raw Permalink Normal View History

#include "CFileInStream.h"
CFileInStream::CFileInStream() = default;
CFileInStream::CFileInStream(const TString& rkFile)
{
2025-12-23 14:15:09 -05:00
Open(rkFile, std::endian::big);
}
2025-12-23 14:15:09 -05:00
CFileInStream::CFileInStream(const TString& rkFile, std::endian FileEndianness)
{
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)
{
if (IsValid())
Close();
2019-05-24 21:49:56 -10:00
#ifdef _WIN32
_wfopen_s(&mpFStream, ToWChar(rkFile), L"rb");
2019-05-24 21:49:56 -10:00
#else
mpFStream = fopen(*rkFile, "rb");
#endif
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
{
mFileSize = 0;
2026-01-11 11:00:26 -05: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)
{
2026-01-11 11:00:26 -05:00
if (!IsValid())
return;
fread(pDst, 1, Count, mpFStream);
}
2026-01-11 11:00:26 -05:00
bool CFileInStream::Seek(int32_t Offset, uint32_t Origin)
{
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);
}
2026-01-11 11:00:26 -05:00
bool CFileInStream::Seek64(int64_t Offset, uint32_t Origin)
{
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
}
2026-01-11 11:00:26 -05:00
uint32_t CFileInStream::Tell() const
{
2026-01-11 11:00:26 -05:00
if (!IsValid())
return 0;
return ftell(mpFStream);
}
2026-01-11 11:00:26 -05:00
uint64_t CFileInStream::Tell64() const
{
2026-01-11 11:00:26 -05:00
if (!IsValid())
return 0;
2019-05-24 21:49:56 -10:00
#ifdef _WIN32
return _ftelli64(mpFStream);
2019-05-24 21:49:56 -10:00
#else
return ftello(mpFStream);
#endif
}
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
{
return mFileSize;
}
TString CFileInStream::FileName() const
{
return mName;
}