📄 synchtododb.cpp
字号:
#include"ToDo.h"
#include"ToDoList.h"
#include"SynchToDoDb.h"
CSynchToDoDb* CSynchToDoDb::NewLC( TDesC& aFileName )
{
CSynchToDoDb* self = new(ELeave)CSynchToDoDb;
CleanupStack::PushL(self);
self->ConstructL(aFileName);
return self;
}
CSynchToDoDb* CSynchToDoDb::NewL( TDesC& aFileName )
{
CSynchToDoDb* self = CSynchToDoDb::NewLC(aFileName);
CleanupStack::Pop(self);
return self;
}
void CSynchToDoDb::ConstructL(const TDesC& aFileName)
{
iFileName = aFileName.AllocL();
iToDoList = CToDoList::NewL(10);
User::LeaveIfError(iFs.Connect());
iFs.MkDir(_L("c:\\") );
}
CSynchToDoDb::~CSynchToDoDb()
{
delete iFileName;
delete iToDoList;
iToDoList = NULL;
iFs.Close();
}
void CSynchToDoDb::AddToDoL( CToDo* aToDo )
{
iToDoList->AddToDoL( aToDo );
SaveL();
}
TInt CSynchToDoDb::Count() const
{
return iToDoList->Count();
}
void CSynchToDoDb::InsertL( TInt aIndex, CToDo* aToDo )
{
if ( aIndex < 0 || aIndex > Count())
{
return;
}
iToDoList->InsertL(aIndex, aToDo);
SaveL();
}
void CSynchToDoDb::ModifyL(CToDo* aToDo , TInt aIndex )
{
iToDoList->ModifyL(aToDo, aIndex);
SaveL();
}
void CSynchToDoDb::RemoveToDo( TInt aIndex )
{
iToDoList->RemoveToDo(aIndex);
SaveL();
}
TInt CSynchToDoDb::Find(TDesC& aTitle) const
{
iToDoList->Find(aTitle);// 封装前两个类,可以直接调用
return 0;
}
const CArrayPtr<CToDo>* CSynchToDoDb::ToDoList() const
{
return iToDoList->ToDoList();
}
CToDo* CSynchToDoDb::At( TInt aIndex )
{
return iToDoList->At(aIndex);
}
CToDo* CSynchToDoDb::operator[](TInt index)
{
return (*iToDoList)[index];
}
const CToDo* CSynchToDoDb::operator[](TInt index) const
{
return (*iToDoList)[index];
}
void CSynchToDoDb::SaveL()
{
RFileWriteStream writeStream;
CleanupClosePushL( writeStream );
User::LeaveIfError( writeStream.Replace( iFs, *iFileName, EFileWrite ) );
iToDoList->ExternalizeL( writeStream );
CleanupStack::PopAndDestroy( &writeStream );
}
void CSynchToDoDb::Reset()
{
iToDoList->ToDoList()->ResetAndDestroy();
SaveL();
}
void CSynchToDoDb::RestoreL()//恢复数据 把数据从流中读出来,放到iToDoList中
{
RFileReadStream readStream;
TInt err = readStream.Open( iFs, *iFileName, EFileRead ) ; //刚开始用的是user::leaveerr 没有把文件读进去,
//直接leave了,打开的是空的,所以做一下判断是否为空!
if ( KErrNone != err )
{
return;
}
CleanupClosePushL( readStream );
iToDoList->InternalizeL( readStream );
CleanupStack::PopAndDestroy( &readStream );
}
void CSynchToDoDb::SaveL( TDesC8& aData )
{
RFile file;
file.Replace( iFs, *iFileName, EFileWrite );
CleanupClosePushL( file );
file.Write( aData );
CleanupStack::PopAndDestroy( &file );
}
HBufC8* CSynchToDoDb::DataLC()
{
RFile file;
file.Open( iFs, *iFileName, EFileRead );
CleanupClosePushL( file );
TInt size = 0;
User::LeaveIfError( file.Size( size ) );
HBufC8* buf8 = HBufC8::NewLC( size );
TPtr8 ptr8 = buf8->Des();
file.Read( ptr8 );
CleanupStack::Pop( buf8 );
CleanupStack::PopAndDestroy( &file );
return buf8;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -