⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 countdowndb.cpp

📁 《基于symbian os 的手机开发与应用》 源代码 何伟 著
💻 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 + -