Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
Gray::cFile Class Reference

#include <cFile.h>

Inheritance diagram for Gray::cFile:
Gray::CFile Gray::cStream Gray::CObject Gray::cStreamInput Gray::cStreamOutput Gray::cStreamBase Gray::cStreamBase Gray::cFileText GrayLib::cFileMem GrayLib::cHeartbeatFile GrayLib::cScriptFileWriter GrayLib::cScriptFileReader

Public Member Functions

 cFile ()
 
 cFile (cStringF sFilePath, OF_FLAGS_t nOpenFlags)
 
virtual ~cFile ()
 
virtual bool isValidCheck () const noexcept
 < memory allocation and structure definitions are valid. More...
 
virtual STREAM_SEEKRET_t Seek (STREAM_OFFSET_t lOffset=0, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
 
virtual STREAM_POS_t GetPosition () const override
 
virtual STREAM_POS_t GetLength () const override
 
int Read (void *pData, size_t nDataSize)
 
void Write (const void *pData, size_t nDataSize)
 
cStringF get_FilePath () const
 
cStringF get_FileTitleX () const
 
cStringF get_FileExt () const
 
bool IsFileExt (const FILECHAR_t *pszExt) const
 
OF_FLAGS_t get_Mode () const noexcept
 
OF_FLAGS_t get_ModeFlags () const noexcept
 
bool isModeWrite () const noexcept
 
bool isModeRead () const noexcept
 
virtual bool isFileOpen () const
 
virtual HRESULT OpenX (cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_READ|OF_SHARE_DENY_NONE)
 
virtual void Close (void) override
 
HANDLE DetachFileHandle ()
 
HRESULT OpenWait (cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_READ|OF_SHARE_DENY_NONE, TIMESYSD_t nWaitTime=100)
 
HRESULT OpenCreate (cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_CREATE|OF_WRITE, _SECURITY_ATTRIBUTES *pSa=nullptr)
 
bool SetFileTime (const cTimeFile *lpCreationTime, const cTimeFile *lpAccessTime, const cTimeFile *lpLastWriteTime)
 
bool SetFileTime (cTimeInt timeCreation, cTimeInt timeLastWrite)
 
HRESULT GetFileStatus (OUT cFileStatus &attr) const
 
virtual HRESULT ReadX (void *pData, size_t nDataSize) override
 
virtual HRESULT WriteX (const void *pData, size_t nDataSize) override
 
virtual HRESULT FlushX () override
 
- Public Member Functions inherited from Gray::CFile
virtual ~CFile ()
 
virtual void SetLength (STREAM_SEEKRET_t dwNewLen)
 
HRESULT Write (const void *pData, size_t nDataSize)
 
HRESULT Read (void *pData, size_t nDataSize)
 
- Public Member Functions inherited from Gray::CObject
virtual ~CObject ()
 
virtual void AssertValid () const
 < memory allocation and structure definitions are valid. More...
 
virtual void Serialize (cArchive &a)
 
- Public Member Functions inherited from Gray::cStream
void SeekToBegin ()
 
STREAM_POS_t SeekToEnd ()
 
- Public Member Functions inherited from Gray::cStreamInput
 cStreamInput () noexcept
 
virtual ~cStreamInput ()
 
virtual size_t SetSeekSizeMin (size_t nSizeMin=k_FILE_BLOCK_SIZE)
 
virtual HRESULT ReadX (OUT void *pData, size_t nDataSize)
 
HRESULT ReadAll (OUT cHeapBlock &block, size_t nSizeExtra=0)
 
virtual HRESULT ReadStringLine (OUT char *pszBuffer, StrLen_t iSizeMax)
 
virtual HRESULT ReadStringLine (OUT wchar_t *pszBuffer, StrLen_t iSizeMax)
 
HRESULT ReadT (OUT void *pVal, size_t nSize)
 
template<typename TYPE >
HRESULT ReadT (OUT TYPE &val)
 
template<typename TYPE >
HRESULT ReadTN (OUT TYPE &val)
 
HRESULT ReadSize (OUT size_t &nSize)
 
template<typename TYPE >
HRESULT ReadSizeT (OUT TYPE &n)
 
HRESULT ReadHashCode (OUT UINT32 &nHashCode)
 
HRESULT ReadHashCode (OUT UINT64 &nHashCode)
 
HRESULT ReadN (OUT BYTE *pBuffer, size_t nSizeMax)
 
template<typename _CH >
HRESULT ReadStringN (OUT _CH *pszStr, StrLen_t iSizeMax)
 
virtual HRESULT ReadPeek (void *pData, size_t nDataSize)
 
- Public Member Functions inherited from Gray::cStreamBase
virtual ~cStreamBase ()
 
void SeekToBegin ()
 
STREAM_POS_t SeekToEnd ()
 
- Public Member Functions inherited from Gray::cStreamOutput
 cStreamOutput () noexcept
 
virtual ~cStreamOutput ()
 
HRESULT WriteT (const void *pVal, size_t nDataSize)
 
template<typename TYPE >
HRESULT WriteT (TYPE val)
 
HRESULT WriteSize (size_t nSize)
 
HRESULT WriteHashCode (HASHCODE_t nHashCode)
 
HRESULT WriteN (const void *pBuffer, size_t nSize)
 
template<typename _CH >
HRESULT WriteStringN (const _CH *pszStr)
 
template<typename _CH >
HRESULT WriteCharRepeat (_CH nChar, int nCount=1)
 
virtual HRESULT WriteString (const char *pszStr)
 
virtual HRESULT WriteString (const wchar_t *pszStr)
 
StrLen_t VPrintf (const char *pszFormat, va_list args)
 
StrLen_t VPrintf (const wchar_t *pszFormat, va_list args)
 
StrLen_t _cdecl Printf (const char *pszFormat,...)
 
StrLen_t _cdecl Printf (const wchar_t *pszFormat,...)
 
HRESULT WriteStream (cStreamInput &sInp, STREAM_POS_t nSizeMax=k_FILE_BLOCK_SIZE, IStreamProgressCallback *pProgress=nullptr, TIMESYSD_t nTimeout=0)
 Copy cStreamInput to this stream. More...
 

Static Public Member Functions

static HRESULT __stdcall DeletePath (const FILECHAR_t *pszFileName)
 
static HRESULT __stdcall DeletePathX (const FILECHAR_t *pszFilePath, DWORD nFileFlags=0)
 
static HRESULT __stdcall LoadFile (const FILECHAR_t *pszFilePath, OUT cHeapBlock &block, size_t nSizeExtra=0)
 

Protected Member Functions

HRESULT OpenSetup (cStringF sFilePath, OF_FLAGS_t uModeFlags)
 
- Protected Member Functions inherited from Gray::CFile
bool isFileOpen () const noexcept
 
HRESULT OpenCreate (cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_CREATE|OF_WRITE, _SECURITY_ATTRIBUTES *pSa=nullptr)
 

Protected Attributes

OF_FLAGS_t m_nOpenFlags
 MMSYSTEM uses high bits of 32 bit flags. OF_FLAGS_TYPE_ OF_READ etc. More...
 
- Protected Attributes inherited from Gray::CFile
cStringF m_strFileName
 store a copy of the full file path. MFC defined name. More...
 

Static Protected Attributes

static ITERATE_t sm_iFilesOpen = 0
 global count of all open files for this process. More...
 

Friends

class cFileTests
 

Additional Inherited Members

- Public Attributes inherited from Gray::CFile
cOSHandle m_hFile
 OSHandle for the open file. More...
 
- Static Public Attributes inherited from Gray::cStreamBase
static const BYTE k_SIZE_MASK = 0x80
 Used for WriteSize() More...
 
static const size_t k_FILE_BLOCK_SIZE = (32 * 1024)
 default arbitrary transfer block size. more than this is NOT more efficient. More...
 

Detailed Description

General OS file access interface. Extends MFC functionality

Note
Any file can be a cStreamOutput of text as well. Dupe the MFC functionality we need from CFile. Similar to IStream and CAtlFile

Constructor & Destructor Documentation

◆ cFile() [1/2]

Gray::cFile::cFile ( )
inline

◆ cFile() [2/2]

Gray::cFile::cFile ( cStringF  sFilePath,
OF_FLAGS_t  nOpenFlags 
)
inline

◆ ~cFile()

virtual Gray::cFile::~cFile ( )
inlinevirtual

Member Function Documentation

◆ Close()

void Gray::cFile::Close ( void  )
overridevirtual

cStream

Reimplemented from Gray::CFile.

Reimplemented in Gray::cFileText.

◆ DeletePath()

HRESULT GRAYCALL Gray::cFile::DeletePath ( const FILECHAR_t pszFileName)
static

Use 'DeletePath' name because windows uses a "#define" macro to overload DeleteFile()! Same as MFC CFile::Remove()

Note
This can't be used with wildcards or to delete folders ! use cFileDir::DeleteDirFiles for that.
Returns
S_OK = 0. S_FALSE = not here, but thats probably OK. <0 = HRESULT failed for some other reason. (ERROR_ACCESS_DENIED,ERROR_PATH_NOT_FOUND) Cant delete a directory this way !

◆ DeletePathX()

HRESULT GRAYCALL Gray::cFile::DeletePathX ( const FILECHAR_t pszFilePath,
DWORD  nFileFlags = 0 
)
static

Delete this file and fix collisions and read only marking.

◆ DetachFileHandle()

HANDLE Gray::cFile::DetachFileHandle ( )

◆ FlushX()

HRESULT Gray::cFile::FlushX ( )
overridevirtual

synchronous flush of write data to file.

Reimplemented from Gray::cStreamOutput.

Reimplemented in Gray::cFileText.

◆ get_FileExt()

cStringF Gray::cFile::get_FileExt ( ) const

get the EXTension including the . Must replace the stupid MFC version of this.

◆ get_FilePath()

cStringF Gray::cFile::get_FilePath ( ) const
inline

like _MFC_VER CFile::GetFilePath(); but cStringF

Note
Don't use GetFilePath() as it has some weird side effects in MFC. like WIN32 GetFinalPathNameByHandle() linux readlink on /proc/self/fd/NNN where NNN is the file descriptor

◆ get_FileTitleX()

cStringF Gray::cFile::get_FileTitleX ( ) const

Get file name and ext Don't use MFC GetFileTitle() since MFC does not include EXT

◆ get_Mode()

OF_FLAGS_t Gray::cFile::get_Mode ( ) const
inlinenoexcept

get basic set of OF_FLAGS_t. get rid of OF_NONCRIT type flags. e.g. OF_READ

◆ get_ModeFlags()

OF_FLAGS_t Gray::cFile::get_ModeFlags ( ) const
inlinenoexcept

Get the full/hidden elements of the OF_FLAGS_t Flags. e.g. OF_NONCRIT

◆ GetFileStatus()

HRESULT Gray::cFile::GetFileStatus ( OUT cFileStatus attr) const

Get the file status info by its open handle Similar to CFile::GetStatus() Same as cFileDir::ReadFileStatus()

◆ GetLength()

virtual STREAM_POS_t Gray::cFile::GetLength ( ) const
inlineoverridevirtual

disambiguate. cStream should be same as FILE_SIZE_t?

Reimplemented from Gray::CFile.

Reimplemented in GrayLib::cFileMem.

◆ GetPosition()

virtual STREAM_POS_t Gray::cFile::GetPosition ( ) const
inlineoverridevirtual

disambiguate. cStream should be same as FILE_SIZE_t?

Reimplemented from Gray::CFile.

Reimplemented in GrayLib::cFileMem, and Gray::cFileText.

◆ IsFileExt()

bool Gray::cFile::IsFileExt ( const FILECHAR_t pszExt) const

is the pszExt a match?

◆ isFileOpen()

virtual bool Gray::cFile::isFileOpen ( ) const
inlinevirtual

Reimplemented in GrayLib::cFileMem, and Gray::cFileText.

◆ isModeRead()

bool Gray::cFile::isModeRead ( ) const
inlinenoexcept

◆ isModeWrite()

bool Gray::cFile::isModeWrite ( ) const
inlinenoexcept

◆ isValidCheck()

virtual bool Gray::cFile::isValidCheck ( ) const
inlinevirtualnoexcept

< memory allocation and structure definitions are valid.

Reimplemented from Gray::CObject.

◆ LoadFile()

HRESULT GRAYCALL Gray::cFile::LoadFile ( const FILECHAR_t pszFilePath,
OUT cHeapBlock block,
size_t  nSizeExtra = 0 
)
static

Read file into memory.

  • nSizeExtra = allocate some extra space at end.
    Returns
    size read (Not including nSizeExtra). or <0 = error.

◆ OpenCreate()

HRESULT Gray::cFile::OpenCreate ( cStringF  sFilePath = "",
OF_FLAGS_t  nOpenFlags = OF_CREATE | OF_WRITE,
_SECURITY_ATTRIBUTES *  pSa = nullptr 
)

Open a file by name.

  • nOpenFlags = OF_READ | OF_WRITE | OF_READWRITE Expect the file pointer to be at 0!

◆ OpenSetup()

HRESULT Gray::cFile::OpenSetup ( cStringF  sFilePath,
OF_FLAGS_t  uModeFlags 
)
protected

Internal function to set internal params. Similar to SetFilePath() in MFC ?

  • nOpenFlags = OF_BINARY | OF_WRITE
    Returns
    S_FALSE = success , already open. S_OK = success

◆ OpenWait()

HRESULT Gray::cFile::OpenWait ( cStringF  sFilePath = "",
OF_FLAGS_t  nOpenFlags = OF_READ | OF_SHARE_DENY_NONE,
TIMESYSD_t  nWaitTime = 100 
)

Try to open the file. Wait for a bit if it fails to open. If the file is locked because 'access is denied' then just wait and keep trying.

◆ OpenX()

HRESULT Gray::cFile::OpenX ( cStringF  sFilePath = "",
OF_FLAGS_t  nOpenFlags = OF_READ | OF_SHARE_DENY_NONE 
)
virtual

◆ Read()

int Gray::cFile::Read ( void *  pData,
size_t  nDataSize 
)
inline

◆ ReadX()

HRESULT Gray::cFile::ReadX ( void *  pData,
size_t  nDataSize 
)
overridevirtual

Read a block from the stream. advance the current position.

Returns
length of the read data. 0 or HRESULT_WIN32_C(ERROR_HANDLE_EOF) = end of file.

Reimplemented in GrayLib::cFileMem, and Gray::cFileText.

◆ Seek()

virtual STREAM_SEEKRET_t Gray::cFile::Seek ( STREAM_OFFSET_t  lOffset = 0,
SEEK_ORIGIN_TYPE  eSeekOrigin = SEEK_Set 
)
inlineoverridevirtual

disambiguate cStream not const in MFC

Returns
the New position, <0 = FAILED = INVALID_SET_FILE_POINTER

Reimplemented from Gray::CFile.

Reimplemented in Gray::cFileText, and GrayLib::cFileMem.

◆ SetFileTime() [1/2]

bool Gray::cFile::SetFileTime ( const cTimeFile lpCreationTime,
const cTimeFile lpAccessTime,
const cTimeFile lpLastWriteTime 
)

Set the time access for an open file. lpAccessTime = can be null.

Note
lpLastWriteTime is the only time guaranteed to work on all systems.
FAT32 lpLastWriteTime is only accurate to 2 seconds !! Similar to CFile::SetStatus() and linux utime()
Returns
true = OK;

◆ SetFileTime() [2/2]

bool Gray::cFile::SetFileTime ( cTimeInt  timeCreation,
cTimeInt  timeLastWrite 
)

Use HResult::GetLastDef() to find out why this fails.

Returns
true = OK;

◆ Write()

void Gray::cFile::Write ( const void *  pData,
size_t  nDataSize 
)
inline

◆ WriteX()

HRESULT Gray::cFile::WriteX ( const void *  pData,
size_t  nDataSize 
)
overridevirtual

Write a block to the stream. advance the current position.

  • pData == nullptr = just test if i could write this much.
    Returns
    length written. <0 = FAILED

Reimplemented from Gray::cStreamOutput.

Reimplemented in GrayLib::cFileMem, and Gray::cFileText.

Friends And Related Function Documentation

◆ cFileTests

friend class cFileTests
friend

Member Data Documentation

◆ m_nOpenFlags

OF_FLAGS_t Gray::cFile::m_nOpenFlags
protected

MMSYSTEM uses high bits of 32 bit flags. OF_FLAGS_TYPE_ OF_READ etc.

◆ sm_iFilesOpen

ITERATE_t Gray::cFile::sm_iFilesOpen = 0
staticprotected

global count of all open files for this process.


The documentation for this class was generated from the following files: