summaryrefslogblamecommitdiffstats
path: root/source/cFile.h
blob: 674ce93a2af94dbb868d330ffbc7215359e62ff7 (plain) (tree)



























































                                                                                                          
                                                       



                                          
                                                           















                                                                                                                                           


                                                                                       
















                              

// cFile.h

// Interfaces to the cFile class providing an OS-independent abstraction of a file.

/*
The object is optimized towards binary reads.
The object has no multithreading locks, don't use from multiple threads!
Usage:
1, Construct a cFile instance (no-param constructor)
2, Open a file using Open(), check return value for success
3, Read / write
4, Destroy the instance

-- OR --

1, Construct a cFile instance opening the file (filename-param constructor)
2, Check if the file was opened using IsOpen()
3, Read / write
4, Destroy the instance
*/





#pragma once
#ifndef CFILE_H_INCLUDED
#define CFILE_H_INCLUDED





#ifndef _WIN32
	#define USE_STDIO_FILE
#endif  // _WIN32

// DEBUG:
#define USE_STDIO_FILE





class cFile
{
public:
	/// The mode in which to open the file
	enum EMode
	{
		fmRead,   // Read-only. If the file doesn't exist, object will not be valid
		fmWrite,  // Write-only. If the file already exists, it will be overwritten
		fmReadWrite,  // Read/write. If the file already exists, it will be left intact
	} ;
	
	/// Simple constructor - creates an unopened file object, use Open() to open / create a real file
	cFile(void);
	
	/// Constructs and opens / creates the file specified, use IsOpen() to check for success
	cFile(const AString & iFileName, EMode iMode);
	
	/// Auto-closes the file, if open
	~cFile();
	
	bool Open(const AString & iFileName, EMode iMode);
	void Close(void);
	bool IsOpen(void) const;
	bool IsEOF(void) const;
	
	/// Reads  up to iNumBytes bytes into iBuffer, returns the number of bytes actually read,    or -1 on failure; asserts if not open
	int Read (void * iBuffer,       int iNumBytes);
	
	/// Writes up to iNumBytes bytes from iBuffer, returns the number of bytes actually written, or -1 on failure; asserts if not open
	int Write(const void * iBuffer, int iNumBytes);
	
	/// Seeks to iPosition bytes from file start, returns old position or -1 for failure; asserts if not open
	int Seek (int iPosition);
	
	/// Returns the current position (bytes from file start) or -1 for failure; asserts if not open
	int Tell (void) const;
	
	/// Returns the size of file, in bytes, or -1 for failure; asserts if not open
	int GetSize(void) const;
	
private:
	#ifdef USE_STDIO_FILE
	FILE * m_File;
	#else
	HANDLE m_File;
	#endif
} ;





#endif  // CFILE_H_INCLUDED