Listing 4: Implementation of FileTime
#include "FileTime.h" #include <iomanip> #include <strstream> #include <stdexcept> #include <windows.h> #if defined(__BORLANDC__) using namespace std; #endif /** * This is where most of the real work of the class is done. * NewTime() takes an argument of type FILETIME and then makes the * appropriate API calls to turn this into a useful set of data. * This data is then stored in the object's member variables. A * FILETIME object is returned from various file access functions, * but the data it contains is not generally useful, and must be * converted. **/ void FileTime::NewTime(const FILETIME *pFileTime) throw(runtime_error){ ZeroMemberVars(); FILETIME LocalFileTime; BOOL bResult=FileTimeToLocalFileTime(pFileTime,&LocalFileTime); if(!bResult) throw runtime_error( "Problem in FileTime::NewTime().Couldn't convert file time" " to local time"); SYSTEMTIME SystemTime; bResult=FileTimeToSystemTime(&LocalFileTime,&SystemTime); if(!bResult) throw runtime_error( "Problem in FileTime::NewTime().Couldn't convert local time" " to system time"); mYear = SystemTime.wYear; mMonth = SystemTime.wMonth; mDayOfWeek = SystemTime.wDayOfWeek; mDay = SystemTime.wDay; mHour = SystemTime.wHour; mMinute = SystemTime.wMinute; mSecond = SystemTime.wSecond; mMillisecond = SystemTime.wMilliseconds; } void FileTime::ZeroMemberVars() throw() { mYear=0; mMonth=0; mDayOfWeek=0; mDay=0; mHour=0; mMinute=0; mSecond=0; mMillisecond=0; mDateSeparator='/'; mTimeSeparator=':'; mDateFillCharacter='0'; mTimeFillCharacter='0'; } const char* const FileTime::DateString() throw() { ostrstream osDate(mString,MaxLength); osDate << setfill(mDateFillCharacter) << setw(MonthLength) << mMonth << mDateSeparator << setw(DayLength) << mDay << mDateSeparator << setw(YearLength) << mYear << ends; return mString; } const char* const FileTime::TimeString() throw() { ostrstream osTime(mString,MaxLength); osTime << setfill(mTimeFillCharacter) << setw(HourLength) << mHour << mTimeSeparator << setw(MinuteLength) << mMinute << mTimeSeparator << setw(SecondLength) << mSecond << mTimeSeparator << setw(MillisecondLength) << mMillisecond << ends; return mString; } const char* const FileTime::YearString() throw() { ostrstream os(mString,MaxLength); os << setfill(mDateFillCharacter) << setw(YearLength) << mYear << ends; return mString; } const char* const FileTime::MonthString() throw() { ostrstream os(mString,MaxLength); os << setfill(mDateFillCharacter) << setw(MonthLength) << mMonth << ends; return mString; } // portions omitted ... const char* const FileTime::MillisecondString() throw() { ostrstream os(mString,MaxLength); os << setfill(mTimeFillCharacter) << setw(MillisecondLength) << mMillisecond << ends; return mString; } //End of File