mirror of
https://github.com/AxioDL/LibCommon.git
synced 2026-03-30 11:47:23 -07:00
121 lines
2.3 KiB
C++
121 lines
2.3 KiB
C++
#include "CFileOutStream.h"
|
|
|
|
CFileOutStream::CFileOutStream()
|
|
: mpFStream(nullptr)
|
|
, mSize(0)
|
|
{
|
|
}
|
|
|
|
CFileOutStream::CFileOutStream(const TString& rkFile)
|
|
: mpFStream(nullptr)
|
|
{
|
|
Open(rkFile, EEndian::BigEndian);
|
|
}
|
|
|
|
CFileOutStream::CFileOutStream(const TString& rkFile, EEndian FileEndianness)
|
|
: mpFStream(nullptr)
|
|
{
|
|
Open(rkFile, FileEndianness);
|
|
}
|
|
|
|
CFileOutStream::CFileOutStream(const CFileOutStream& rkSrc)
|
|
: mpFStream(nullptr)
|
|
{
|
|
Open(rkSrc.mName, rkSrc.mDataEndianness);
|
|
|
|
if (rkSrc.IsValid())
|
|
Seek(rkSrc.Tell(), SEEK_SET);
|
|
}
|
|
|
|
CFileOutStream::~CFileOutStream()
|
|
{
|
|
if (IsValid())
|
|
Close();
|
|
}
|
|
|
|
void CFileOutStream::Open(const TString& rkFile, EEndian FileEndianness)
|
|
{
|
|
if (IsValid())
|
|
Close();
|
|
|
|
TWideString WideFile = rkFile.ToUTF16();
|
|
_wfopen_s(&mpFStream, (const wchar_t*) *WideFile, L"wb");
|
|
mName = rkFile;
|
|
mDataEndianness = FileEndianness;
|
|
mSize = 0;
|
|
}
|
|
|
|
void CFileOutStream::Update(const TString& rkFile, EEndian FileEndianness)
|
|
{
|
|
if (IsValid())
|
|
Close();
|
|
|
|
TWideString WideFile = rkFile.ToUTF16();
|
|
_wfopen_s(&mpFStream, (const wchar_t*) *WideFile, L"rb+");
|
|
mName = rkFile;
|
|
mDataEndianness = FileEndianness;
|
|
Seek(0x0, SEEK_END);
|
|
mSize = Tell();
|
|
Seek(0x0, SEEK_SET);
|
|
}
|
|
|
|
void CFileOutStream::Close()
|
|
{
|
|
if (IsValid())
|
|
fclose(mpFStream);
|
|
mpFStream = nullptr;
|
|
mSize = 0;
|
|
}
|
|
|
|
void CFileOutStream::WriteBytes(const void *pkSrc, uint32 Count)
|
|
{
|
|
if (!IsValid()) return;
|
|
fwrite(pkSrc, 1, Count, mpFStream);
|
|
if (Tell() > mSize) mSize = Tell();
|
|
}
|
|
|
|
bool CFileOutStream::Seek(int32 Offset, uint32 Origin)
|
|
{
|
|
if (!IsValid()) return false;
|
|
return (fseek(mpFStream, Offset, Origin) != 0);
|
|
}
|
|
|
|
bool CFileOutStream::Seek64(int64 Offset, uint32 Origin)
|
|
{
|
|
if (!IsValid()) return false;
|
|
return (_fseeki64(mpFStream, Offset, Origin) != 0);
|
|
}
|
|
|
|
uint32 CFileOutStream::Tell() const
|
|
{
|
|
if (!IsValid()) return 0;
|
|
return ftell(mpFStream);
|
|
}
|
|
|
|
uint64 CFileOutStream::Tell64() const
|
|
{
|
|
if (!IsValid()) return 0;
|
|
return _ftelli64(mpFStream);
|
|
}
|
|
|
|
bool CFileOutStream::EoF() const
|
|
{
|
|
return (Tell() == Size());
|
|
}
|
|
|
|
bool CFileOutStream::IsValid() const
|
|
{
|
|
return (mpFStream != 0);
|
|
}
|
|
|
|
uint32 CFileOutStream::Size() const
|
|
{
|
|
if (!IsValid()) return 0;
|
|
return mSize;
|
|
}
|
|
|
|
TString CFileOutStream::FileName() const
|
|
{
|
|
return mName;
|
|
}
|