Files
Work/common/Fileio.hpp
2024-08-16 13:56:54 -04:00

100 lines
2.3 KiB
C++

#ifndef _COMMON_FILEIO_HPP_
#define _COMMON_FILEIO_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_STDIO_HPP_
#include <common/stdio.hpp>
#endif
#ifndef _COMMON_INTEL_HPP_
#include <common/intel.hpp>
#endif
#if _MSC_VER > 1200
#pragma warning( disable : 26812)
#endif
// Optimized for fast reading of files.
class FileIO
{
public:
enum Mode{ReadOnly,ReadWrite};
enum ByteOrder{BigEndian,LittleEndian};
enum SeekFrom{SeekCurrent=SEEK_CUR,SeekEnd=SEEK_END,SeekBeginning=SEEK_SET};
enum CreationFlags{Create,CreateAlways,None};
FileIO(void);
FileIO(String pathFileName,ByteOrder byteOrder=LittleEndian,Mode openMode=ReadOnly,CreationFlags creationFlags=None);
virtual ~FileIO();
bool open(String pathFileName,ByteOrder byteOrder=LittleEndian,Mode openMode=ReadOnly,CreationFlags creationFlags=None);
bool close(void);
bool rewind(void);
bool peek(BYTE &value);
bool read(BYTE &value);
bool read(WORD &value);
bool read(DWORD &value);
bool read(char *lpBuffer,DWORD lengthData);
bool read(BYTE *lpBuffer,DWORD lengthData);
bool read(char *lpBuffer,DWORD lengthData,int stopChar);
bool write(BYTE value);
bool write(WORD value);
bool write(DWORD value);
bool write(char *lpBuffer,DWORD lengthData);
FileIO &operator++(void);
FileIO &operator--(void);
bool seek(LONG seekOffset,SeekFrom seekFrom);
DWORD readLine(String &lineString);
bool writeLine(const String &strLine);
bool isOkay(void)const;
DWORD tell(void)const;
ByteOrder getByteOrder(void)const;
void setByteOrder(ByteOrder byteOrder);
private:
enum {CarriageReturn=0x0D,LineFeed=0x0A,NullChar=0x00};
FILE *mlpFilePointer;
ByteOrder mByteOrder;
};
inline
bool FileIO::isOkay(void)const
{
return (mlpFilePointer?true:false);
}
inline
DWORD FileIO::tell(void)const
{
if(!isOkay())return false;
return ::ftell(mlpFilePointer);
}
inline
bool FileIO::read(BYTE *lpBuffer,DWORD lengthData)
{
return read((char*)lpBuffer,lengthData);
}
inline
bool FileIO::write(BYTE value)
{
if(!isOkay())return false;
if(1!=::fwrite(&value,1,1,mlpFilePointer))return false;
return true;
}
inline
FileIO::ByteOrder FileIO::getByteOrder(void)const
{
return mByteOrder;
}
inline
void FileIO::setByteOrder(ByteOrder byteOrder)
{
mByteOrder=byteOrder;
}
#endif