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