1
0

Added cFile::Flush().

This is useful when using cFile as a log file and we know the server may crash after a specific write, so we flush the file before continuing.
This commit is contained in:
madmaxoft 2014-01-25 15:27:34 +01:00
parent 96b4af1596
commit 5aa3fc4c56
2 changed files with 34 additions and 20 deletions

View File

@ -450,3 +450,12 @@ int cFile::Printf(const char * a_Fmt, ...)
void cFile::Flush(void)
{
fflush(m_File);
}

View File

@ -18,6 +18,8 @@ Usage:
2, Check if the file was opened using IsOpen() 2, Check if the file was opened using IsOpen()
3, Read / write 3, Read / write
4, Destroy the instance 4, Destroy the instance
For reading entire files into memory, just use the static cFile::ReadWholeFile()
*/ */
@ -55,7 +57,7 @@ public:
static const char PathSeparator = '/'; static const char PathSeparator = '/';
#endif #endif
/// The mode in which to open the file /** The mode in which to open the file */
enum eMode enum eMode
{ {
fmRead, // Read-only. If the file doesn't exist, object will not be valid fmRead, // Read-only. If the file doesn't exist, object will not be valid
@ -63,13 +65,13 @@ public:
fmReadWrite // Read/write. If the file already exists, it will be left intact; writing will overwrite the data from the beginning fmReadWrite // Read/write. If the file already exists, it will be left intact; writing will overwrite the data from the beginning
} ; } ;
/// Simple constructor - creates an unopened file object, use Open() to open / create a real file /** Simple constructor - creates an unopened file object, use Open() to open / create a real file */
cFile(void); cFile(void);
/// Constructs and opens / creates the file specified, use IsOpen() to check for success /** Constructs and opens / creates the file specified, use IsOpen() to check for success */
cFile(const AString & iFileName, eMode iMode); cFile(const AString & iFileName, eMode iMode);
/// Auto-closes the file, if open /** Auto-closes the file, if open */
~cFile(); ~cFile();
bool Open(const AString & iFileName, eMode iMode); bool Open(const AString & iFileName, eMode iMode);
@ -77,60 +79,63 @@ public:
bool IsOpen(void) const; bool IsOpen(void) const;
bool IsEOF(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 /** 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); 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 /** 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); 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 /** Seeks to iPosition bytes from file start, returns old position or -1 for failure; asserts if not open */
int Seek (int iPosition); int Seek (int iPosition);
/// Returns the current position (bytes from file start) or -1 for failure; asserts if not open /** Returns the current position (bytes from file start) or -1 for failure; asserts if not open */
int Tell (void) const; int Tell (void) const;
/// Returns the size of file, in bytes, or -1 for failure; asserts if not open /** Returns the size of file, in bytes, or -1 for failure; asserts if not open */
int GetSize(void) const; int GetSize(void) const;
/// Reads the file from current position till EOF into an AString; returns the number of bytes read or -1 for error /** Reads the file from current position till EOF into an AString; returns the number of bytes read or -1 for error */
int ReadRestOfFile(AString & a_Contents); int ReadRestOfFile(AString & a_Contents);
// tolua_begin // tolua_begin
/// Returns true if the file specified exists /** Returns true if the file specified exists */
static bool Exists(const AString & a_FileName); static bool Exists(const AString & a_FileName);
/// Deletes a file, returns true if successful /** Deletes a file, returns true if successful */
static bool Delete(const AString & a_FileName); static bool Delete(const AString & a_FileName);
/// Renames a file or folder, returns true if successful. May fail if dest already exists (libc-dependant)! /** Renames a file or folder, returns true if successful. May fail if dest already exists (libc-dependant)! */
static bool Rename(const AString & a_OrigPath, const AString & a_NewPath); static bool Rename(const AString & a_OrigPath, const AString & a_NewPath);
/// Copies a file, returns true if successful. /** Copies a file, returns true if successful. */
static bool Copy(const AString & a_SrcFileName, const AString & a_DstFileName); static bool Copy(const AString & a_SrcFileName, const AString & a_DstFileName);
/// Returns true if the specified path is a folder /** Returns true if the specified path is a folder */
static bool IsFolder(const AString & a_Path); static bool IsFolder(const AString & a_Path);
/// Returns true if the specified path is a regular file /** Returns true if the specified path is a regular file */
static bool IsFile(const AString & a_Path); static bool IsFile(const AString & a_Path);
/// Returns the size of the file, or a negative number on error /** Returns the size of the file, or a negative number on error */
static int GetSize(const AString & a_FileName); static int GetSize(const AString & a_FileName);
/// Creates a new folder with the specified name. Returns true if successful. Path may be relative or absolute /** Creates a new folder with the specified name. Returns true if successful. Path may be relative or absolute */
static bool CreateFolder(const AString & a_FolderPath); static bool CreateFolder(const AString & a_FolderPath);
/// Returns the entire contents of the specified file as a string. Returns empty string on error. /** Returns the entire contents of the specified file as a string. Returns empty string on error. */
static AString ReadWholeFile(const AString & a_FileName); static AString ReadWholeFile(const AString & a_FileName);
// tolua_end // tolua_end
/// Returns the list of all items in the specified folder (files, folders, nix pipes, whatever's there). /** Returns the list of all items in the specified folder (files, folders, nix pipes, whatever's there). */
static AStringVector GetFolderContents(const AString & a_Folder); // Exported in ManualBindings.cpp static AStringVector GetFolderContents(const AString & a_Folder); // Exported in ManualBindings.cpp
int Printf(const char * a_Fmt, ...); int Printf(const char * a_Fmt, ...);
/** Flushes all the bufferef output into the file (only when writing) */
void Flush(void);
private: private:
#ifdef USE_STDIO_FILE #ifdef USE_STDIO_FILE
FILE * m_File; FILE * m_File;