OsFile::~OsFile() { #ifdef _DEBUG PerformanceTimer t; t.start(); #endif CloseHandle(m_handle); #ifdef _DEBUG t.stop(); ms_time+= t.getElapsedTime(); #endif }
void OsFile::seek(int newFilePosition) { #ifdef _DEBUG PerformanceTimer t; t.start(); #endif if (m_offset != newFilePosition) { const DWORD result = SetFilePointer(m_handle, newFilePosition, NULL, FILE_BEGIN); DEBUG_FATAL(static_cast<int>(result) != newFilePosition, ("SetFilePointer failed")); UNREF(result); m_offset = newFilePosition; } #ifdef _DEBUG t.stop(); ms_time += t.getElapsedTime(); #endif }
OsFile *OsFile::open(const char *fileName, bool randomAccess) { #ifdef _DEBUG PerformanceTimer t; t.start(); #endif // attempt to open the file HANDLE handle = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | (randomAccess ? FILE_FLAG_RANDOM_ACCESS : 0), NULL); // check to make sure the file opened sucessfully if (handle == INVALID_HANDLE_VALUE) return NULL; #ifdef _DEBUG t.stop(); ms_time += t.getElapsedTime(); #endif return new OsFile(handle); }
int OsFile::getFileSize(const char *fileName) { NOT_NULL(fileName); #ifdef _DEBUG PerformanceTimer t; t.start(); #endif HANDLE handle = CreateFile(fileName, 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (handle == INVALID_HANDLE_VALUE) return -1; int const size = GetFileSize(handle, NULL); CloseHandle(handle); #ifdef _DEBUG t.stop(); ms_time += t.getElapsedTime(); #endif return size; }
int OsFile::read(void *destinationBuffer, int numberOfBytes) { #ifdef _DEBUG PerformanceTimer t; t.start(); #endif DWORD amountReadDword; BOOL result = ReadFile(m_handle, destinationBuffer, static_cast<uint>(numberOfBytes), &amountReadDword, NULL); // miles crasher hack #if 0 FATAL(!result, ("FileStreamerThread::processRead ReadFile failed to read '%d' bytes with error '%d'", static_cast<uint>(numberOfBytes), GetLastError())); #else if(!result) { if(GetLastError() == 998) // access violation - buffer coming from miles hosed { WARNING(true,("FileStreamerThread::processRead ReadFile failed to read '%d' bytes with error '%d'", static_cast<uint>(numberOfBytes), GetLastError())); return 0; } else { FATAL(true, ("FileStreamerThread::processRead ReadFile failed to read '%d' bytes with error '%d'", static_cast<uint>(numberOfBytes), GetLastError())); } } #endif // end miles crasher hack #ifdef _DEBUG t.stop(); ms_time += t.getElapsedTime(); #endif m_offset += static_cast<int>(amountReadDword); return static_cast<int>(amountReadDword); }