76 lines
1.4 KiB
C++
76 lines
1.4 KiB
C++
/*
|
|
Copyright (C) 2005-2006 Feeling Software Inc.
|
|
MIT License: http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
#include "FUtils/FUFile.h"
|
|
|
|
FUFile::FUFile(const char* filename, Mode mode)
|
|
{
|
|
const char* openMode;
|
|
switch (mode)
|
|
{
|
|
case READ: openMode = "rb"; break;
|
|
case WRITE: openMode = "wb"; break;
|
|
default: openMode = "rb"; break;
|
|
}
|
|
|
|
filePtr = fopen(filename, openMode);
|
|
}
|
|
|
|
FUFile::FUFile()
|
|
{
|
|
filePtr = NULL;
|
|
}
|
|
|
|
FUFile::~FUFile()
|
|
{
|
|
if (filePtr != NULL)
|
|
{
|
|
Close();
|
|
}
|
|
}
|
|
|
|
// Retrieve the file length
|
|
uint32 FUFile::GetLength()
|
|
{
|
|
FUAssert(IsOpen(), return 0);
|
|
|
|
uint32 currentPosition = ftell(filePtr);
|
|
if (fseek(filePtr, 0, SEEK_END) != 0) return 0;
|
|
|
|
uint32 length = ftell(filePtr);
|
|
if (fseek(filePtr, currentPosition, SEEK_SET) != 0) return 0;
|
|
|
|
return length;
|
|
}
|
|
|
|
// Reads in a piece of the file into the given buffer
|
|
bool FUFile::Read(void* buffer, size_t length)
|
|
{
|
|
FUAssert(IsOpen(), return false);
|
|
return fread(buffer, length, 1, filePtr) == 1;
|
|
}
|
|
|
|
// Write out some data to a file
|
|
bool FUFile::Write(const void* buffer, size_t length)
|
|
{
|
|
FUAssert(IsOpen(), return false);
|
|
return fwrite(buffer, length, 1, filePtr) == 1;
|
|
}
|
|
|
|
// Flush/close the file stream
|
|
void FUFile::Flush()
|
|
{
|
|
FUAssert(IsOpen(), );
|
|
fflush(filePtr);
|
|
}
|
|
|
|
void FUFile::Close()
|
|
{
|
|
FUAssert(IsOpen(), );
|
|
fclose(filePtr);
|
|
filePtr = NULL;
|
|
}
|