📄 countdowndb.cpp
字号:
#include "CountDownDB.h"
#include <CountDown.rsg>
#include <s32file.h>
#include <eikenv.h>
_LIT(KRecordDBFileName,"c:\\system\\data\\CountDown.dat");
_LIT(KRscFileName,"c:\\system\\data\\CountDownRsc.dat");
CCountDownDB::CCountDownDB()
{
iArrayDB = new(ELeave) CArrayFixFlat<TRecordDBStruct>(1);
TRAPD(r, ReadDBL());
if(r!=KErrNone)
SaveDBL();
}
CCountDownDB::~CCountDownDB()
{
delete iArrayDB;
}
void CCountDownDB::ReadDBL()
{
RFileReadStream reader;
reader.PushL();
RFs fs;
User::LeaveIfError(fs.Connect());
User::LeaveIfError(reader.Open(fs, KRecordDBFileName, EFileRead));
TInt32 len = 0;
TInt32 count = reader.ReadInt32L();
for(TInt i=0; i<count; i++)
{
TRecordDBStruct db;
len = reader.ReadInt32L();
if(len)
{
reader.ReadL((TUint16*)db.iName.Ptr(), len);
db.iName.SetLength(len);
}
TUint32 high = reader.ReadUint32L();
TUint32 low = reader.ReadUint32L();
db.iTime.Set(high, low);
iArrayDB->AppendL(db);
}
CleanupStack::PopAndDestroy(); //reader
fs.Close();
}
void CCountDownDB::SaveDBL()
{
RFileWriteStream writer;
writer.PushL();
RFs fs;
User::LeaveIfError(fs.Connect());
User::LeaveIfError(writer.Replace(fs, KRecordDBFileName, EFileWrite));
TInt32 len = 0;
TInt32 count = iArrayDB->Count();
writer.WriteInt32L(count);
for(TInt i=0; i<count; i++)
{
TRecordDBStruct &db = iArrayDB->At(i);
len = db.iName.Length();
writer.WriteInt32L(len);
if(len)
writer.WriteL(db.iName.Ptr(), len);
writer.WriteUint32L(db.iTime.High());
writer.WriteUint32L(db.iTime.Low());
}
writer.CommitL();
CleanupStack::PopAndDestroy(); //writer
fs.Close();
}
void *CCountDownDB::ReadRscL()
{
void *ret = NULL;
RFs fs;
RFile file;
CleanupClosePushL(fs);
CleanupClosePushL(file);
User::LeaveIfError(fs.Connect());
TInt err = file.Open(fs, KRscFileName, EFileRead);
if(err==KErrNone)
{
TInt size = 0;
User::LeaveIfError(file.Size(size));
if(size>0)
{
ret = (TUint8 *)User::Alloc(size);
CleanupStack::PushL(ret);
TPtr8 ptr8((TUint8 *)ret, size);
User::LeaveIfError(file.Read(ptr8, size));
CleanupStack::Pop(ret);
}
}
CleanupStack::PopAndDestroy(2);//fs, file
return ret;
}
void CCountDownDB::SaveRscL()
{
TInt allocSize = 0;
TName rscInfo1, rscInfo2, rscInfo3;
TInt rscCount = 3;
TInt len1, len2, len3;
CEikonEnv::Static()->ReadResource(rscInfo1, R_STR_CD_TIPS);
CEikonEnv::Static()->ReadResource(rscInfo2, R_STR_CD_OK_TIPS);
CEikonEnv::Static()->ReadResource(rscInfo3, R_STR_CD_TIMER_OUT_TIPS);
allocSize = (rscCount+1)*sizeof(TInt32) + 2*rscInfo1.Length() + 2*rscInfo2.Length() + 2*rscInfo3.Length();
TUint16 *buf = (TUint16 *)User::Alloc(allocSize);
CleanupStack::PushL(buf);
TUint32 *p32 = (TUint32 *)buf;
*p32 = rscCount;
p32 ++;
len1 = rscInfo1.Length();
*p32 = len1;
p32 ++;
len2 = rscInfo2.Length();
*p32 = len2;
p32 ++;
len3 = rscInfo3.Length();
*p32 = len3;
p32 ++;
TPtr16 ptr16((TUint16 *)p32, len1+len2+len3);
ptr16.Copy(rscInfo1);
ptr16.Append(rscInfo2);
ptr16.Append(rscInfo3);
RFs fs;
RFile file;
CleanupClosePushL(fs);
CleanupClosePushL(file);
User::LeaveIfError(fs.Connect());
User::LeaveIfError(file.Replace(fs, KRscFileName, EFileWrite));
TPtrC8 ptr8((TUint8 *)buf, allocSize);
User::LeaveIfError(file.Write(ptr8));
CleanupStack::PopAndDestroy(3);//buf, fs, file
}
TInt GetDays(TTime &aTime1, TTime &aTime2)
{
TInt days = aTime1.DaysFrom(aTime2).Int();
if(days==0)
days = aTime1.DayNoInYear() - aTime2.DayNoInYear();
return days;
}
TInt GetDays(TTime &aTime1, TInt64 aTime2)
{
TTime time(aTime2);
return GetDays(aTime1, time);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -